제출 #105910

#제출 시각아이디문제언어결과실행 시간메모리
105910PajarajaGenetics (BOI18_genetics)C++17
100 / 100
1555 ms160488 KiB
#include <bits/stdc++.h> using namespace std; int uc[4][4107],k,m; long long arr[4107][4107],ars[4107][1000]; bool c[4107],ps,p[4107][4107]; bool check(int a,int b) { int x=0; p[a][b]=true; for(int i=0;i<=(ps?(m-1)/16:(m-1)/64);i++) x+=__builtin_popcountll(ars[a][i] xor ars[b][i]); if(ps) x/=2; if(x==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/64]+=(arr[i][j]<<(j%64)); else for(int i=0;i<n;i++) for(int j=0;j<m;j++) ars[i][j/16]+=(1LL<<(arr[i][j]+(j%16)*4)); int x=0,y=1; mt19937 rng(2252522); /*for(int ttt=0;ttt<400000;ttt++) { x=uniform_int_distribution<int>(0, n-1)(rng),y=uniform_int_distribution<int>(0,n-1)(rng); 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<221;j++) { y=uniform_int_distribution<int>(0, n-1)(rng); if(i==y || p[i][y] || p[y][i]) continue; if(!check(i,y)) {c[y]=true; propo=true; break;} } if(propo) continue; for(int j=0;j<n;j++) { y=j; if(i==y || p[i][y] || p[y][i]) continue; if(!check(i,y)) {propo=true; c[y]=true; break;} } if(propo) continue; printf("%d",i+1); return 0; } }

컴파일 시 표준 에러 (stderr) 메시지

genetics.cpp: In function 'int main()':
genetics.cpp:35:6: warning: unused variable 'x' [-Wunused-variable]
  int x=0,y=1;
      ^
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...