Codeforces Round #644 (Div. 3) Spy-string ###K ###K //K
题意:给n个字符串 每个字符串的长度为m 问能否找出一个字符串s使得给出的所有字符串
至多改变一个字符后得到s
题目链接:https://codeforc.es/contest/1360/problem/F
刚开始想dfs 所有情况然后剪枝
后来一直想着找有多少个不同才不满足 都不行
正解思路:考虑到数据范围很小 所以可以取第一个字符串 如果存在答案那么答案
肯定是第一个字符串不改变或者改变一个字符得到
枚举所有的可能 然后check是否合法
时间复杂度o(26m*nmt)
1 #include<bits/stdc++.h> 2 using namespace std; 3 #define ll long long 4 #define pb push_back 5 const int maxn =2e5+10; 6 string a[20]; 7 int n,m; 8 string s; 9 int check() 10 { 11 for(int i=1;i<=n;i++) 12 { 13 int dif=0; 14 for(int j=0;j<m;j++) 15 { 16 if(s[j]!=a[i][j]) 17 dif++; 18 if(dif>1) 19 return 0; 20 } 21 } 22 return 1; 23 } 24 int main() 25 { 26 ios::sync_with_stdio(false); 27 cin.tie(0); 28 int t; 29 cin>>t; 30 while(t--) 31 { 32 cin>>n>>m; 33 int f=0; 34 for(int i=1;i<=n;i++) 35 { 36 cin>>a[i]; 37 } 38 for(int i=0;i<m;i++) 39 { 40 if(f) 41 break; 42 s=a[1]; 43 for(int j=0;j<26;j++) 44 { 45 s[i]=char('a'+j); 46 if(check()) 47 { 48 f=1; 49 break; 50 } 51 } 52 } 53 if(f) 54 cout<<s<<'\n'; 55 else 56 cout<<-1<<'\n'; 57 58 59 } 60 61 62 }

浙公网安备 33010602011771号