Submission #1205881

#TimeUsernameProblemLanguageResultExecution timeMemory
1205881Adeeb_obedoCombo (IOI18_combo)C++20
30 / 100
9 ms676 KiB
#include<bits/stdc++.h>
#define int long long
#define ld   double
#define _1 first
#define _2 second
#define yes cout<<"Yes\n"
#define nah cout<<"No\n"
#define FFF ios_base::sync_with_stdio(0);cin.tie(0);
#define ipr pair<int,int>
#define ret return
#define intt int32_t
#define mid ((l+r)/2)
#define pb push_back
#define lll __int128
#include "combo.h"
using namespace std;
int tst, ts;
intt mo = 1e9+7, dx[] = {0, 1, 0, -1}, dy[] = {-1, 0, 1, 0};
int mul( int x, int y ) {
    ret ( ( x % mo ) * ( y % mo ) ) % mo;
    ret x*y;
}
int pwo( int x, int y ) {
    int res = 1;
    for( int i = 63; i + 1; i-- )
        res = mul( res, res * ( ( 1ll << i )&y ? x : 1 ) );
    ret res;
}
int dvii( int x, int y ) {
    ret mul( x, pwo( y, mo - 2 ) );
}
int oo( char x ) {
    ret ( int )x - '0';
}
int lgg( int x, int y ) {
    int u = 0;
    while( x ) {
        u++;
        x /= y;
    }
    ret u;
}
int mun( int x, int y ) {
    while( x < y )x += mo;
    ret ( x - y ) % mo;
}
int add( int x, int y ) {
    ret x + y - ( mo * ( x + y >= mo ) );
    ret x + y;
}
int lcm( int x, int y ) {
    ret ( x * y ) / __gcd( x, y );
}
#define endl '\n';
const int M =1007, N = 2e5 + 7, N2 = 5e3 + 7, inf = 2e18 + 7;
int n;
string guess_sequence(intt Nn){
	n=Nn;
	srand(time(0));
	string s="",x="ABXY";
	if(press("AB"))
		s+=(press("A")?'A':'B');
	else
		s+=(press("X")?'X':'Y');
	for(int i=0;i<4;i++)
        if(x[i]==s[0])
            swap(x[i],x[3]);
    x.pop_back();
	set<pair<int,string>>st;
	for(int i=1;i<n;i++){
		sort(x.begin(),x.end());
		swap(x[2],x[rand()%3]);
		st.insert({i,x});
	}
	while(st.size()>1){
		/*cout<<endl;
		for(auto i:st)
            cout<<i._1<<" "<<i._2<<endl;
        cout<<endl;*/

		pair<int,string> a=*st.begin(),b=*(++st.begin());
		st.erase(a),st.erase(b);
		while(s.size()<=b._1)
			s+=s[0];
		string s1=s,s2=s,s3=s,s4=s;
		s1[b._1]=b._2[0],s1[a._1]=a._2[0];
		s2[b._1]=b._2[0],s2[a._1]=a._2[1];
		s3[b._1]=b._2[1],s3[a._1]=a._2[0];
		s4[b._1]=b._2[1],s4[a._1]=a._2[1];
		if(b._2.size()<3){
			int o=press(s1);
			if(o==s1.size()){
				s=s1;
				continue;
			}
			if(o<a._1+1){
				s=s2;
				s[b._1]=s[0];
				st.insert(b);
			}
			if(o>a._1)
				s=s3;
		}
		else if(a._2.size()<3){

			int o=press(s1+s3);
			if(o==s1.size()){
				s=s1;
				s[b._1]=s[0];
				b._2.pop_back();
				swap(b._2[1],b._2[rand()%2]);
				st.insert(b);
				continue;
			}
			if(o<a._1+1){
				s[a._1]=a._2[1];
				s[b._1]=s[0];
				st.insert(b);
			}
			if(o>a._1){
				s=s1;
				s[b._1]=b._2[2];
			}
		}
		else{
			int o=press(s1+s2+s3+s4);
			if(o==s1.size()){
				s=s1;
				b._2.pop_back();
				a._2.pop_back();
				swap(b._2[1],b._2[rand()%2]);
				swap(a._2[1],a._2[rand()%2]);
				st.insert(a),st.insert(b);
				continue;
			}
			if(o<a._1+1){
				s[b._1]=s[0];
				s[a._1]=a._2[2];
				st.insert(b);
			}
			if(o>a._1){
				a._2.pop_back();
				swap(a._2[1],a._2[rand()%2]);
				st.insert(a);
				s[a._1]=s[0];
				s[b._1]=b._2[2];
			}
		}
	}
	if(s.size()<n)
        s+=s[0];
	if(st.size()){
        pair<int,string>p=*st.begin();
        string ss=s;
        s[p._1]=p._2[0],ss[p._1]=p._2[1];
        if(p._2.size()==2){
            if(press(ss)==n)
                swap(s,ss);
        }
        else{
            if(press(ss+s)<n)
                s[p._1]=p._2[2];
            else{
                if(press(ss)==n)
                    swap(s,ss);
            }
        }
    }
	//cout<<n<<endl;
	ret s;
}
/*
void solve(){


}
intt main() {
	FFF
   // freopen("fcolor.in", "r", stdin);
   // freopen("fcolor.out", "w", stdout);
	tst = 1;
	//cin >> tst;
    for ( ts = 1; ts <= tst; ts++ ){
		solve();
   }
}
*/
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...