孤独的照片-枚举+乘法原理
void solve() {
int n;
string s;
cin >> n >> s;
int ans = 0;
for (int i = 0; i < n; ++i) {
int l = i - 1, cnt1 = 0;
while (l >= 0 and s[l] != s[i]) {
l--;
cnt1 ++;
}
int r = i + 1, cnt2 = 0;
while (r < n and s[r] != s[i]) {
r++;
cnt2 ++;
}
ans += cnt1 * cnt2;
ans += max(0ll, cnt1 - 1ll) + max(0ll, cnt2 - 1ll);
}
cout << ans;
}
做法
枚举每头牛作为那个只出现一次的牛, 然后向左右扩展, 以此处为H为例:
a.左边有G, 右边也有, 对答案的贡献为左边的数量乘右边的数量(若一边没有, 则这种情况的贡献为零).
b.只取一边的牛, 如果这边没有, 贡献为零, 否则贡献为数量减一.
复杂度分析
每个点最多访问三次: 枚举其左边时向右扩展访问到, 枚举到本身时访问到, 枚举到右边时向左扩展时访问到.
标签:int,++,枚举,cnt2,cnt1,ans,一题,乘法 From: https://www.cnblogs.com/whose-dream/p/16996028.html