1. 程式人生 > 實用技巧 >CF903E. Swapping Characters(暴力)

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