Submission #1182005

#TimeUsernameProblemLanguageResultExecution timeMemory
1182005asli_bgToxic Gene (NOI23_toxic)C++20
0 / 100
0 ms324 KiB
#include<bits/stdc++.h>
using namespace std;

#include <ext/pb_ds/assoc_container.hpp>
using namespace __gnu_pbds;

//#define int long long

#include "toxic.h"

typedef pair<int,int> pii;
typedef vector<pii> vii;
typedef vector<int> vi;
typedef vector<bool> vb;

#define FOR(i,a) for(int i=0;i<(a);i++)
#define FORE(i,a,b) for(int i=(a);i<(b);i++)

#define all(x) x.begin(),x.end()
#define fi first
#define se second
#define pb push_back
#define sp <<" "<<

#define cont(x) for(auto el:x) cout<<el<<' ';cout<<endl;
#define contp(x) for(auto el:x) cout<<el.fi<<'-'<<el.se<<' ';cout<<endl;

#define DEBUG(x) cout<<#x sp x<<endl;
#define carp(x,y) ((x%MOD)*(y%MOD))%MOD
#define topla(x,y) ((x%MOD)+(y%MOD))%MOD
#define mid (l+r)/2

void determine_type(int n){

    vector<char> ans(n+1);

    vi v,vec;

    int t=0;
    FORE(i,1,n){
        v.pb(i);
        v.pb(i+1);
        int deg=query_sample(v);

        if(deg==1){
            v.pop_back();
            assert(v[0]==i);
            deg=query_sample(v);
            if(deg==0){
                t=i;
                ans[i]='T';
                ans[i+1]='S';
            }
            else{
                t=i+1;
                ans[i]='S';
                ans[i+1]='T';
            }
        }
        else if(deg==2){
            vec.pb(i);
        }
        else{
            v.pop_back();
            assert(v[0]==i);
            deg=query_sample(v);
            if(deg==1){
                t=i+1;
                ans[i]='R';
                ans[i+1]='T';
            }
            else{
                ans[i]='T';
                t=i;
                v.pop_back();
                v.pb(i+1);
                deg=query_sample(v);
                if(deg==0){
                    t=i+1;
                    ans[i+1]='T';
                }
                else{
                    ans[i+1]='R';
                }
            }
        }

        v.clear();
    }

    for(auto el:vec){
        v.pb(t);
        v.pb(el);
        v.pb(el+1);
        int deg=query_sample(v);
        if(deg==0){
            //regular
            ans[el]='R';
            ans[el+1]='R';
        }
        else if(deg==2){
            ans[el]='S';
            ans[el+1]='S';
        }
        else{
            v.clear();
            v.pb(el);
            v.pb(t);

            deg=query_sample(v);

            if(deg==1){
                ans[el]='S';
                ans[el+1]='R';
            }
            else{
                ans[el]='R';
                ans[el+1]='S';
            }
        }
        v.clear();
    }

    FORE(i,1,n+1){
        answer_type(i,ans[i]);
    }
}
#Verdict Execution timeMemoryGrader output
Fetching results...