제출 #760269

#제출 시각아이디문제언어결과실행 시간메모리
760269TrumlingCombo (IOI18_combo)C++14
30 / 100
32 ms652 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];
      two=1;
}

    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...