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; }