F. Spy-string
題目鏈接:點擊就送
題目描述:
對於n個字符串然後找到一個字符串使得這個字符串和前面n個字符串對應位置最多隻有一個字符不同。
解題思路:
暴力就完事了!!!可以直接對第一個字符串,然後將其每個位置都換成’a’-‘z’(每次只能一個位置字符變),然後再對剩餘n-1字符串判斷是否相等或者只差一個字符不同。
代碼:
#include<bits/stdc++.h>
using namespace std;
char ch[15][15];
char ans[15];
int n,k;
bool check(){
int sum = 0;
for(int i = 2; i <= n; ++i){
sum=0;//記錄每個有多少不同
for(int j = 0; j < k; ++j){
if(ans[j]!=ch[i][j]){
sum++;
}
if(sum>1)return false; //直接退出,減少時間
}
}
return true;
}
int solve(){
cin >> n >> k;
for(int i = 1; i <= n; ++i){
cin >> ch[i];
}
ans[k]='\0';//這也保證ans每次輸出直到這裏結束
for(int i = 0; i < k; ++i)ans[i]=ch[1][i];
//然後對於第一個字符串每個位置都從'a'-'z'替換進行嘗試
for(char c = 'a'; c <= 'z'; ++c){
for(int i = 0; i < k; ++i){
//對於每個位置進行嘗試換一下
ans[i]=c;
if(check()){
return 1;
}
ans[i]=ch[1][i];//還原,一定不能忘記
}
}
return 0;
}
int main()
{
int t;
cin >> t;
while(t--){
if(solve()){
cout << ans << endl;
}
else cout << -1 << endl;
}
return 0;
}