#include <cstdio>
#include <cstring>
using namespace std;
const int MaxN = 1e5;
char s[MaxN + 5];
int len;
long long od_a, od_b, od_ans, ev_a, ev_b, ev_ans;
int main()
{
scanf("%s", s);
len = strlen(s);
for(int i = 0; i <= len - 1; i++)
{
if(i & 1)
{
if(s[i] == ‘a‘)
{
od_a++;
od_ans += od_a; //如果i为奇数;则od_ans需增加od_a的个数;
ev_ans += ev_a; //如果i为奇数;则ev_ans需增加ev_a的个数;
}
if(s[i] == ‘b‘)
{
od_b++;
od_ans += od_b;
ev_ans += ev_b;
}
}
else
{
if(s[i] == ‘a‘)
{
ev_a++;
od_ans += ev_a; //如果i为偶数;则od_ans需增加ev_a的个数;
ev_ans += od_a; //如果i为偶数;则ev_ans需增加od_a的个数;
}
if(s[i] == ‘b‘)
{
ev_b++;
od_ans += ev_b;
ev_ans += od_b;
}
}
}
printf("%I64d %I64d\n", ev_ans, od_ans);
}
本题重点在于读过1次的字符不能再次搜索,在每一位都更新答案,并记录到本位与本位字符相同的奇数位字符次数,和偶数位次数。
原文:http://www.cnblogs.com/chenjiaqi-acm/p/4992684.html