题目链接:https://codeforces.com/contest/1360/problem/F
题意:给你n个字符串,每个字符串长度为m,要求是否存在一个字符串使得该字符串与每个字符串的不同的字符个数小于等于1个。
思路:看到n和m这么小,想到了暴力,但是发现如果dfs枚举字符串的每个字母的话复杂度最高为26^10次方,肯定会T,就算每个位置只枚举n个字符也是m^n次方,但是仔细一想会发现其实只要任意选取其中一个字符串,然后从枚举每个位置的字符,其它位置保持不变,因为答案的字符串一定是跟题中给定的任意一个字符串最多只在一个位置上不同,这样的时间复杂度大概为O(26*N*M^2),对于题目中n,m<=10还是妥妥能过的。
代码:
#include
using namespace std;
typedef long long ll;
int main()
{
int t,n,m;
cin>>t;
while(t--){
cin>>n>>m;
string s[20];
for(int i=0;i>s[i];
bool flag=false;int idx;char ans;
for(int i=0;i mp;
for(int k1=0;k11){
f=0;break;
}
}
if(f){
idx=i;ans=('a'+j);
flag=true;break;
}
}
if(flag) break;
}
if(!flag) cout<<-1<