您的位置:首页 > 其它

UVALive 6659 Dromicpalin Substrings

2015-09-15 22:10 309 查看
题目链接:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=48741

题意:求字符串有多少个连续字串可以重组成回文串。

题解:直接求出字母个数的前缀和,再枚举区间判断字母个数为奇数个的是否小于等于1.

#include <bits/stdc++.h>
using namespace std;

typedef long long ll;

const int N=1005;
int T;
char s
;
int len,cnt[30]
;
int main() {
#ifdef ONLINE_JUDGE
#else
    freopen("test.in", "r", stdin);
#endif
    int ca=1;
    scanf("%d",&T);
    while(T--) {
        scanf("%s",s+1);
        len=strlen(s+1);
        memset(cnt,0,sizeof(cnt));
        for(int i=1; i<=len; i++) {
            cnt[s[i]-'a'][i]=cnt[s[i]-'a'][i-1]+1;
            for(int j=0; j<26; j++) {
                if(j!=s[i]-'a') {
                    cnt[j][i]=cnt[j][i-1];
                }
            }
        }
        int ans=0;
        for(int i=1; i<=len; i++) {
            for(int j=i; j<=len; j++) {
                int odd=0;
                for(int k=0; k<26; k++) {
                    if((cnt[k][j]-cnt[k][i-1])&1) {
                        odd++;
                    }
                }
                if(odd<=1) {
                    ans++;
                }
            }
        }
        printf("Case %d: %d\n",ca++,ans);
    }
    return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: