Submission #861725

#TimeUsernameProblemLanguageResultExecution timeMemory
861725serifefedartarGenetics (BOI18_genetics)C++17
100 / 100
258 ms33632 KiB
#include <bits/stdc++.h> using namespace std; #define fast ios::sync_with_stdio(0);cin.tie(0); #define s second #define f first typedef long long ll; const ll MOD = 1e9+9; const ll LOGN = 20; const ll MAXN = 4100 + 100; const ll P = 31; ll cnt[MAXN][4]; ll need = 0; string dna[MAXN]; int main() { fast int N, M, K; cin >> N >> M >> K; ll now = 1; for (int i = 1; i <= N; i++) { now = (now * P) % MOD; need = (need + (now * K % MOD)) % MOD; cin >> dna[i]; dna[i] = "#" + dna[i]; for (int j = 1; j <= M; j++) { if (dna[i][j] == 'A') cnt[j][0] = (cnt[j][0] + now) % MOD; else if (dna[i][j] == 'T') cnt[j][1] = (cnt[j][1] + now) % MOD; else if (dna[i][j] == 'G') cnt[j][2] = (cnt[j][2] + now) % MOD; else if (dna[i][j] == 'C') cnt[j][3] = (cnt[j][3] + now) % MOD; } } now = 1; for (int i = 1; i <= N; i++) { now = (now * P) % MOD; ll need_now = need - (now * K % MOD); while (need_now < 0) need_now += MOD; ll calc = 0; for (int j = 1; j <= M; j++) { if (dna[i][j] == 'A') calc = (calc + (cnt[j][1] + cnt[j][2] + cnt[j][3])) % MOD; else if (dna[i][j] == 'T') calc = (calc + (cnt[j][0] + cnt[j][2] + cnt[j][3])) % MOD; else if (dna[i][j] == 'G') calc = (calc + (cnt[j][0] + cnt[j][1] + cnt[j][3])) % MOD; else if (dna[i][j] == 'C') calc = (calc + (cnt[j][0] + cnt[j][1] + cnt[j][2])) % MOD; } if (calc == need_now) { cout << i << "\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...