codeforces D. Count Good Substrings

 http://codeforces.com/contest/451/problem/D

题意:给你一个字符串,然后找出奇数和偶数长度的子串的个数,这些字串符合,通过一些连续相同的字符合并后是回文串。

思路:因为这些字符串中的字符只有'a','b',所以首位相同的字串都可以满足,这样就分别统计奇数和偶数位置的字符的个数,然后相互组合就可以。

 1 #include <cstdio>
 2 #include <cstring>
 3 #include <iostream>
 4 #include <algorithm>
 5 #define maxn 100010
 6 #define ll long long
 7 using namespace std;
 8 
 9 char str[maxn];
10 ll o[maxn];
11 ll e[maxn];
12 
13 int main()
14 {
15     cin>>str;
16     int k=strlen(str);
17     ll odd=0;
18     ll even=0;
19     memset(o,0,sizeof(o));
20     memset(e,0,sizeof(e));
21     for(int i=0; i<k; i++)
22     {
23        odd++;
24        int x=str[i]-'a';
25        if(i%2==0)
26        {
27            odd+=o[x];
28            even+=e[x];
29            o[x]++;
30        }
31        else
32        {
33            odd+=e[x];
34            even+=o[x];
35            e[x]++;
36        }
37     }
38     printf("%I64d %I64d\n",even,odd);
39     return 0;
40 }
View Code

 

posted @ 2015-03-16 17:22  null1019  阅读(126)  评论(0编辑  收藏  举报