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 }
View Code

 

posted @ 2020-05-27 16:03  canwinfor  阅读(232)  评论(0)    收藏  举报