Submission #123613

#TimeUsernameProblemLanguageResultExecution timeMemory
123613MoNsTeR_CuBeGenetics (BOI18_genetics)C++17
46 / 100
2083 ms35952 KiB
#include <bits/stdc++.h> using namespace std; #define int long long int getIndex(char c){ if(c == 'A') return 0; if(c == 'C') return 1; if(c == 'G') return 2; return 3; } vector< vector< vector< int > > > opti(4, vector< vector< int > > (65, vector< int >(4101))); int n, m, K; int compare(int a, int b){ int tot = 0; for(int i = 0; i < min((int)65, m/64+1); i++){ for(int j = 0; j < 4; j++){ tot += __builtin_popcountll(opti[j][i][a] ^ opti[j][i][b]); } } return tot/2; } signed main(){ cin >> n >> m >> K; vector< string > v(n); for(int i = 0; i < n; i++){ cin >> v[i]; vector< vector< int > > nb(4, vector< int >(65)); for(int j = 1; j <= 65; j++){ for(int k = (j-1)*64; k < min(j*64, m); k++){ nb[getIndex(v[i][k])][j-1] ^= (1LL<<(63-k%64)); } } for(int k = 0; k < 4; k++){ for(int l = 0; l < m/64+1; l++){ opti[k][l][i] = nb[k][l]; } } } /* for(int i = 0; i < n; i++){ cout << "NUMBER " << i << endl; for(int j = 0; j < 4; j++){ cout << opti[j][0][i] << endl; } }*/ for(int i = 0; i < n; i++){ bool verif = true; for(int j = 0; j < n; j++){ if(j == i) continue; if(compare(i,j) != K){ verif = false; break; } } if(verif){ cout << i+1 << endl; 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...