Submission #395194

#TimeUsernameProblemLanguageResultExecution timeMemory
395194wenqiGenetics (BOI18_genetics)C++14
100 / 100
539 ms33620 KiB
#include <bits/stdc++.h>

using namespace std;

int N, M, K;

using H = uint64_t;

#define P1 30881

const H P2 = (1ll << 45) - 1;

char dna[4169][4169];

H coef[4169];

int idx[256];

uint64_t Y[6];
uint64_t E[4169];

int main() {
	ios::sync_with_stdio(0);
	cin.tie(0);

	cin >> N >> M >> K;

	coef[0] = 1;
	for(int i = 1; i <= N; i++) {
		cin >> dna[i];
		coef[i] = (coef[i - 1] * P1) & P2;
	}

	idx['A'] = 0;
	idx['C'] = 1;
	idx['G'] = 2;
	idx['T'] = 3;

	for(int i = 0; i < M; i++) {
		Y[0] = 0; Y[1] = 0; Y[2] = 0; Y[3] = 0;
		for(int j = 1; j <= N; j++) {
			int w = idx[dna[j][i]];
			Y[w] += coef[j];
			Y[w] &= P2;
		}

		for(int j = 1; j <= N; j++) {
			for(int ii = 0; ii < 4; ii++) {
				if(idx[dna[j][i]] != ii) {
					E[j] += Y[ii];
					E[j] &= P2;
				}
			}
		}
	}

	for (int i = 1; i <= N; i++) {
		H needed = 0;

		for(int j = 1; j <= N; j++) {
			if(i == j) continue;
			needed = (needed + coef[j] * K) & P2;
		}

		H T = E[i];

		if(T == needed) {
			cout << i << '\n';
			return 0;
		}
	}
	return 0;
}

Compilation message (stderr)

genetics.cpp: In function 'int main()':
genetics.cpp:42:24: warning: array subscript has type 'char' [-Wchar-subscripts]
   42 |    int w = idx[dna[j][i]];
      |                ~~~~~~~~^
genetics.cpp:49:20: warning: array subscript has type 'char' [-Wchar-subscripts]
   49 |     if(idx[dna[j][i]] != ii) {
      |            ~~~~~~~~^
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...