Submission #1018177

#TimeUsernameProblemLanguageResultExecution timeMemory
1018177vjudge1Combo (IOI18_combo)C++17
100 / 100
25 ms1868 KiB
#include <bits/stdc++.h>
#include "combo.h"
// #pragma GCC optimize("Ofast")
// #pragma GCC target("avx2")
// #pragma GCC optimization ("O3")
// #pragma GCC optimization ("unroll-loops")
// #pragma GCC target("popcnt")
#define endl '\n'
#define mp make_pair
#define pb push_back
#define f first
#define s second
#define fo(i,n) for(auto i =0 ; i < n;i++)
#define fore(i,l,r) for(auto i = l; i < r;i++)
#define forex(i,r,l) for(auto i = r; i >= l; i--)
#define ffo(i,n) forex(i,n-1,0)
#define all(x) x.begin(),x.end()
#define lsb(x) x&(-x)
#define sz(x) (int)x.size()
#define gcd(a,b) __gcd(a,b)
#define vii vector<ii>
#define pq_min(a) priority_queue<a, vector<a>, greater<a>>
#define fls cout.flush()
using namespace std;
using ll = long long;
using ull = unsigned long long;
using vi = vector<int>;
using ii = pair<int,int>;
using mii = map<int,int>;
using lld = long double;
void valid(ll in){cout<<((in)?"YES\n":"NO\n");}
ll lcm(ll a, ll b){return (a/gcd(a,b))*b;}
// press(p)
// int press(string S){
//     cout << S << endl;cout.flush();
//     int ans; cin >> ans;
//     return ans;
// }
string guess_sequence(int N) {
    string S="";
    if(press("AB")){
        if(press("A"))S+="A";
        else S+="B";
    }else{
        if(press("X"))S+="X";
        else S+="Y";
    }
    for(int i = 1;i < N-1; i++){
        string ncad;
        int c = 0;
        vector<char> act;
        for(char a : {'A','B','X','Y'}){
            if(a==S[0])continue;
            act.pb(a);
            if(c==0){
                ncad += S + a;
            }else if(c==1){
                for(char e : {'A','B','X','Y'}){
                    if((char)e==S[0])continue;
                    ncad+=S+a+e;
                }
            }
            c++;
        }
        int qq = press(ncad);
        if(qq==sz(S)) S+=act.back();
        else if(qq==sz(S)+1)S+=act[0];
        else S+=act[1];
    }
    if(N!=1){
        vi act;
        for(char e : {'A','B','X','Y'}){
            if(e==S[0])continue;
            act.pb(e);
            if(sz(act)>2){
                S+=e;
                break;
            }
            string ncad = S + e;
            if(press(ncad)==N){
                S+=e;
                break;
            }
        }
    }
    return S;
}

// void test_case(){
//     int n;cin >> n;
//     string ans = guess_sequence(n);
//     cout << ans << endl;
// }
// int main(){cin.tie(0)->sync_with_stdio(0);
//     int t=1;
//     // cin >> t;
//     while(t--)test_case();
// }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...