第三篇博客 codeforces round #644 (div 4變成div 3)

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;
} 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章