F. Spy-string
题意
给定n个长度为m的字符串,找出一个长度也为m的字符串t,使得字符串 t 与给定的 n 个字符串中的每一个最多只有一个字符不同。
答案不存在,输出-1,否则输出t。
思路
如果答案存在,那根据题意,t与给定的任一个字符串最多只有一个字符不同,那么我们对给定的第一个字符串进行修改,每次只改一个字符,对所有的字符串判断是否满足条件,满足则找到。
代码
#include <bits/stdc++.h>
using namespace std;
int t;
int n,m;
string str[15];
string ans;
bool check()
{
for(int i = 2; i <= n; ++i){
int sum = 0;
for(int j = 0; j < m; ++j){
if(ans[j]!=str[i][j]){
++sum;
if(sum > 1)
return false;
}
}
}
return true;
}
int main()
{
cin >> t;
while(t--){
cin >> n >> m;
for(int i = 1; i <= n; ++i)
cin >> str[i];
ans = str[1];
bool flag = false;
for(int i = 0; i < m; ++i){
for(char c = 'a'; c <= 'z'; ++c){//对当前字符做出修改
ans[i] = c;
if(check()){
flag = true;
break;
}
}
if(flag)
break;
ans[i] = str[1][i];//复原当前字符
}
if(flag)
cout << ans << "\n";
else
cout << -1 << "\n";
}
return 0;
}