제출 #630621

#제출 시각아이디문제언어결과실행 시간메모리
630621handlename죄수들의 도전 (IOI22_prison)C++17
80 / 100
12 ms1040 KiB
#include <bits/stdc++.h> //#include "circuit.h" using namespace std; #define pb push_back #define mp make_pair int conv(int id){ if (id==0) return -1; return -2; } int numbitt(int x){ int res=0; while (x>0){ x/=3; res++; } return res; } int bitt(int x,int bit){ while (bit--) x/=3; return x%3; } vector<vector<int> > devise_strategy(int n){ int numbit=numbitt(n); vector<vector<int> > ans(numbit*3-1,vector<int>(n+1,0)); ans[0][0]=0; for (int j=1;j<=n;j++){ if (numbit==1){ if (j==1) ans[0][j]=conv(0); else if (j==n) ans[0][j]=conv(1); } else ans[0][j]=bitt(j,numbit-1)+1; } for (int i=1;i<(int)ans.size();i++){ int lol=(i+2)/3; if (lol%2==0) ans[i][0]=0; else ans[i][0]=1; int bit=numbit-lol; for (int j=1;j<=n;j++){ if (bit==0){ if (bitt(j,bit)==0) ans[i][j]=conv(ans[i][0]); else if (bitt(j,bit)==2) ans[i][j]=conv(1-ans[i][0]); else ans[i][j]=0; continue; } if ((i-1)%3<bitt(j,bit)){ ans[i][j]=conv(1-ans[i][0]); } else if ((i-1)%3>bitt(j,bit)){ ans[i][j]=conv(ans[i][0]); } else { if (bit==1){ if (j%3==2) ans[i][j]=conv(1-ans[i][0]); else if (j%3==0) ans[i][j]=conv(ans[i][0]); else ans[i][j]=lol*3+1; } else ans[i][j]=lol*3+1+bitt(j,bit-1); } } } return ans; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...