제출 #760268

#제출 시각아이디문제언어결과실행 시간메모리
760268Trumling콤보 (IOI18_combo)C++14
5 / 100
22 ms464 KiB
#include "combo.h" #include <bits/stdc++.h> using namespace std; typedef long long ll; #define pb push_back #define F first #define S second #define enter cout<<'\n'; #define INF 99999999999999999 #define MOD 1000000007 #define all(x) x.begin(),x.end() string guess_sequence(int N) { string dic[4]={"A","B","X","Y"}; ll first=-1; string p; for(int j=0;j<2*N;j++) p+=dic[0][0]; for(int j=0;j<2*N;j++) p+=dic[1][0]; ll ans=press(p); pair<int,int>possible; if(ans) { p=""; for(int j=0;j<4*N;j++) p+=dic[0][0]; ans=press(p); if(ans) first=0; else first=1; } else { p=""; for(int j=0;j<4*N;j++) p+=dic[2][0]; ans=press(p); if(ans) first=2; else first=3; } p=""; for(int i=0;i<4*N;i++) p+=dic[first][0]; bool sure[N]={ }; sure[0]=1; bool two=1; for(int i=0;i<N;i++) { if(sure[i]) { two=1; continue; } //if you need two guesses if(two) { p[i]=dic[(first+1)%4][0]; p[i+2*N]=dic[(first+2)%4][0]; p[i+1]=dic[(first+1)%4][0]; p[i+2*N+1]=dic[(first+1)%4][0]; ll ans=press(p); if(ans==i) { p[i]=dic[(first+3)%4][0]; p[i+2*N]=dic[(first+3)%4][0]; continue; } if(ans==i+1) { p[i+2*N]=dic[(first+1)%4][0]; p[i+1]=dic[(first+2)%4][0]; ans=press(p); if(ans==i) { p[i]=dic[(first+2)%4][0]; p[i+2*N]=dic[(first+2)%4][0]; two=0; possible={(first+2)%4,(first+3)%4}; continue; } if(ans==i+1) { p[i]=dic[(first+1)%4][0]; p[i+2*N]=dic[(first+1)%4][0]; p[i+1]=dic[(first+3)%4][0]; p[i+2*N+1]=dic[(first+3)%4][0]; sure[i+1]=1; continue; } if(ans==i+2) { p[i]=dic[(first+1)%4][0]; p[i+2*N]=dic[(first+1)%4][0]; p[i+1]=dic[(first+2)%4][0]; p[i+2*N+1]=dic[(first+2)%4][0]; sure[i+1]=1; continue; } continue; } if(ans==i+2) { p[i+2*N]=dic[(first+1)%4][0]; p[i+1]=dic[(first+1)%4][0]; p[i+2*N+1]=dic[(first+1)%4][0]; sure[i+1]=1; ans=press(p); if(ans==i+2) { p[i]=dic[(first+1)%4][0]; p[i+2*N]=dic[(first+1)%4][0]; } else { p[i]=dic[(first+2)%4][0]; p[i+2*N]=dic[(first+2)%4][0]; } continue; } continue; } ///// p[i]=dic[possible.F][0]; p[i+2*N]=dic[possible.F][0]; p[i+1]=dic[(first+1)%4][0]; p[i+2*N+1]=dic[(first+1)%4][0]; ll ans=press(p); if(ans==i+1) { possible={(first+2)%4,(first+3)%4}; continue; } if(ans==i+2) { sure[i+1]=1; continue; } p[i]=dic[possible.S][0]; p[i+2*N]=dic[possible.S][0]; } string answ; for(int i=0;i<N;i++) answ+=p[i]; return answ; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...