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
"),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
",s[1]),0;
            }
        }
    }
    return printf("-1
"),0;
}
原文地址:https://www.cnblogs.com/zhanglichen/p/13554237.html