2017CCPC杭州题目PDF

Problem A. Super-palindrome

题解:

  给你一个字符串,每一步可以将一个字符替换为另一个字符,问你最少多少步可以使得,该字符串任意奇数子串为回文串,偶数子串为回文串。

满足上面条件一定是ababab这种形式,所以我们只要找到数量最多的两种字符用n-numa-numb得到ans1,有可能一种字符的数量过多,这时候我们只要把所有字符都变成这种字符就行了。得到n-numa,ans2;

在ans1和ans2中去最小值就是答案了;

参考代码:

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn=210;
int T,a[maxn];
char s[maxn];

int main()
{
    scanf("%d",&T);
    while(T--)
    {
        scanf("%s",s+1); 
        int len=strlen(s+1),ans=0;
        for(int i=1;i<=len;++i) a[i]=s[i]-'a'+1;
        for(int i=1;i<=26;++i)
        {
            for(int j=1;j<=26;++j)
            {
                int sum=0;
                for(int k=1;k<=len;++k)
                {
                    if((k&1)&&a[k]==i) ++sum;
                    if(!(k&1)&&a[k]==j) ++sum;
                }
                ans=max(ans,sum);
            }
        }
        for(int i=1;i<=26;++i)
        {
            int sum=0;
            for(int k=1;k<=len;++k)
                if(a[k]==i) sum++;
            ans=max(ans,sum);
        }
        printf("%d\n",len-ans);
        
    }
    
    return 0;
}
View Code

相关文章: