はい。
Codeforces Round #410 (Div.2)
A. Mike and palindrome
#include<bits/stdc++.h>
using namespace std;
int main(){
char s[20];
int ans=0;
scanf("%s",s);
long t=strlen(s);
for(long i=0l;i<t;i++) if (s[i]!=s[t-i-1l]) ans++;
printf("%s\n",((ans==2) || (ans==0 && t%2==1))?"YES":"NO");
return 0;
}
文字列長が偶数ならどこか1組違いであること。奇数ならどこか1組違いか、既に回分であること。既に回分でも中央をchange exactly oneで回文。
B. Mike and strings
#include<bits/stdc++.h>
using namespace std;
#define rep(i,n) for(int i=0;i<n;++i)
#define sc1(a) scanf("%d",&a)
char s[55][55];
int main(){
int n,cnt,ans=55*55;
sc1(n);
rep(i,n){
scanf("%s",s[i]);
}
long t=strlen(s[0]);
for(long i=0;i<t;i++){
cnt=i;
for(long j=0;j<t;j++) s[51][j]=s[0][(i+j)%t];
for (int j=1;j<n;j++) {
int jg=-1;
for(long p=0;p<t;p++) {
jg=p;
for(long q=0;q<t;q++) {
if(s[51][q]!=s[j][(p+q)%t]) {jg=-1; break;}
}
if (jg==p) {cnt+=p; break;}
}
if (jg==-1) {printf("-1\n"); return 0;}
}
ans=min(ans,cnt);
}
printf("%d\n",ans);
return 0;
}
1つずつずらして全部試しました。
C. Mike and gcd problem
あとで