Submission #68344

#TimeUsernameProblemLanguageResultExecution timeMemory
68344PajarajaGenetics (BOI18_genetics)C++17
47 / 100
876 ms82400 KiB
#include <bits/stdc++.h> using namespace std; int uc[4][4107],k,m,arr[4107][4107],ars[4107][1000]; bool c[4107],ps; bool check(int a,int b) { int x=0; for(int i=0;i<=(m-1)/32;i++) x+=__builtin_popcount(ars[a][i] xor ars[b][i]); if((!ps && x==k) || (ps && x==2*k)) return true; return false; } int main() { ios::sync_with_stdio(false); int n; cin>>n>>m>>k; string s; for(int i=0;i<n;i++) { cin>>s; for(int j=0;j<m;j++) { if(s[j]=='A') arr[i][j]=0; if(s[j]=='C') arr[i][j]=1; if(s[j]=='G') arr[i][j]=2; if(s[j]=='T') arr[i][j]=3; if(arr[i][j]>1) ps=true; uc[arr[i][j]][j]++; } } if(!ps) for(int i=0;i<n;i++) for(int j=0;j<m;j++) ars[i][j/32]+=(arr[i][j]<<(j%32)); else for(int i=0;i<n;i++) for(int j=0;j<m;j++) ars[i][j/8]=ars[i][j/8] xor (1<<(arr[i][j]+(j%8)*4)); /*for(int ttt=0;ttt<10000;ttt++) { int x=rand()%n,y=rand()%n; if(x==y) continue; int st=0; if(!check(x,y)) {c[x]=c[y]=true;}; }*/ for(int i=0;i<n;i++) if(!c[i]) { int skor=0; bool propo=false; for(int j=0;j<m;j++) skor+=(n-uc[arr[i][j]][j]); if(skor!=(n-1)*k) continue; for(int j=0;j<n;j++) if(i!=j) if(!check(i,j)) {propo=true; break;} if(propo) continue; printf("%d",i+1); 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...