CF903E Swapping Characters(暴力)
题意:
给出一组字符串,每个字符串都由同一个位置的母串交换两个位置的字母生成,询问母串,或者确定不存在。
题解:
#include<bits/stdc++.h> using namespace std; const int maxn=5005; int n,m,d[maxn]; char s[maxn][maxn]; map<char,int> mp[maxn]; bool f; int main () { cin>>n>>m; for (int i=1;i<=n;i++) cin>>s[i]; for (int j=0;j<m;j++) { mp[1][s[1][j]]++; if (mp[1][s[1][j]]>1) f=true; } for (int i=2;i<=n;i++) { for (int j=0;j<m;j++) { mp[i][s[i][j]]++; if (s[i][j]!=s[1][j]) d[i]++; } if (mp[i]!=mp[1]) return printf("-1\n"),0; } for (int i=0;i<m;i++) { for (int j=i+1;j<m;j++) { int ff=1; for (int k=2;k<=n;k++) { int tt=d[k]; if (s[k][i]!=s[1][i]) tt--; if (s[k][i]!=s[1][j]) tt++; if (s[k][j]!=s[1][j]) tt--; if (s[k][j]!=s[1][i]) tt++; if (!((tt==2)||(tt==0&&f))) { ff=0;break; } } if (ff) { swap(s[1][i],s[1][j]); return printf("%s\n",s[1]),0; } } } return printf("-1\n"),0; }