이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#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];
two=1;
}
string answ;
for(int i=0;i<N;i++)
answ+=p[i];
return answ;
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |