Submission #728944

#TimeUsernameProblemLanguageResultExecution timeMemory
728944WonderfulWhaleGenetics (BOI18_genetics)C++17
19 / 100
2070 ms134688 KiB
#include<bits/stdc++.h>
using namespace std;

#define pb push_back
#define st first
#define nd second
#define pii pair<int, int>
#define all(x) (x).begin(), (x).end()
#define sz(x) (int)(x).size()

string tab[4109];
bool vis[4109];

queue<int> Q;
int dp[4109][4109];

int ile[4109][26];
int sum[4109];

int32_t main() {
	ios_base::sync_with_stdio(false);
	cin.tie(NULL);

	memset(dp, -1, sizeof(dp));

	int n, m, K;
	cin >> n >> m >> K;
	for(int i=1;i<=n;i++) cin >> tab[i];
	for(int i=1;i<=n;i++) {
		for(int j=0;j<m;j++) {
			ile[j][tab[i][j]-'A']++;
		}
	}
	for(int i=1;i<=n;i++) {
		for(int j=0;j<m;j++) {
			for(int k=0;k<4;k++) {
				if(tab[i][j]!='A'+k) {
					sum[i]+=ile[j][k];
				}
			}
		}
	}
	for(int i=1;i<=n;i++) {
		if(sum[i]!=K*(n-1)) vis[i] = true;
	}
	vector<int> v;
	for(int i=1;i<=n;i++) v.pb(i);
	for(int i=1;i<=n;i++) {
		if(!vis[i]) {
			Q.push(i);
			vis[i] = true;
			break;
		}
	}
	while(true) {
		int x = Q.front();
		Q.pop();
		bool ans = true;
		random_shuffle(all(v));
		for(int i=0;i<n;i++) {
			if(v[i]==x) continue;
			int cnt = dp[v[i]][x];
			if(cnt==-1) {
				cnt = 0;
				for(int j=0;j<m;j++) {
					if(tab[x][j]!=tab[v[i]][j]) cnt++;
				}
			}
			dp[v[i]][x] = dp[x][v[i]] = cnt;
			if(cnt==K) {
				if(!vis[v[i]]) {
					vis[v[i]] = true;
					Q.push(v[i]);
				}
			} else {
				vis[v[i]] = true;
				ans = false;
			}
		}
		if(ans) {
			cout << x << "\n";
			return 0;
		}
	}
}

#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...