Submission #728947

#TimeUsernameProblemLanguageResultExecution timeMemory
728947WonderfulWhaleGenetics (BOI18_genetics)C++17
27 / 100
2082 ms79260 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()

vector<int> tab[4109];
bool vis[4109];

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

int ile[4109][4];
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++) {
		tab[i].resize(m);
		string s;
		cin >> s;
		for(int j=0;j<m;j++) {
			if(s[j]=='A') {
				tab[i][j] = 0;
			} else if(s[j] == 'C') {
				tab[i][j] = 1;
			} else if(s[j] == 'G') {
				tab[i][j] = 2;
			} else {
				tab[i][j] = 3;
			}
		}
	}
	for(int i=1;i<=n;i++) {
		for(int j=0;j<m;j++) {
			ile[j][tab[i][j]]++;
		}
	}
	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]!=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;
		}
	}
	random_shuffle(all(v));
	while(true) {
		int x = Q.front();
		Q.pop();
		bool ans = true;
		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...