Submission #1238753

#TimeUsernameProblemLanguageResultExecution timeMemory
1238753MinbaevCombo (IOI18_combo)C++20
100 / 100
7 ms488 KiB
//#include "grader.cpp"
#include "combo.h"
#include <bits/stdc++.h>
#include <ext/pb_ds/assoc_container.hpp>

#pragma GCC target("avx,avx2,fma")
#pragma GCC optimize("Ofast,unroll-loops")

using namespace std;
using namespace __gnu_pbds;

#define pb      push_back
#define all(x)  x.begin(),x.end()
#define ar      array
#define mrand(a, b)   uniform_int_distribution<int>(a, b)(rng)

template<class T>bool umax(T &a,T b){if(a<b){a=b;return true;}return false;}
template<class T>bool umin(T &a,T b){if(b<a){a=b;return true;}return false;}
template<class T> using ste = tree<T, null_type, less_equal<T>,
rb_tree_tag, tree_order_statistics_node_update>;

mt19937_64 rng(chrono::steady_clock::now().time_since_epoch().count());

const long long inf = 1e17 + 7;
const int mod = 1e9 + 7;
const int N = 1e7 + 5;
const int md = 998244353;

int binpow(int a, int b, int m){
    if(b == 0)return 1;
    if(b % 2 == 0){
        int c = binpow(a,b/2,m);
        return (c*c)%m;
    }
    return (binpow(a,b-1,m)*a)%m;
}

int divi(int a, int b, int m){
    return (a*(binpow(b,m-2, m)))%m;
}

string guess_sequence(int N){
	string str = "";
	vector<char>v = {'A', 'B', 'X', 'Y'};
	
	if(press("AB")){
		if(press("A")){
			v.erase(v.begin(), v.begin()+1);
			str += 'A';
		}
		else {
			v.erase(v.begin()+1, v.begin()+2);
			str += 'B';
		}
	}
	else{
		if(press("X")){
			v.erase(v.begin()+2, v.begin()+3);
			str += 'X';
		}
		else {
			v.erase(v.begin()+3, v.begin()+4);
			str += 'Y';
		}
	}
	
//	for(auto to:v)cout << to << " ";
//	cout << "\n";
	
	for(int i = 2;i<N;i++){
		string s = str;
		s += v[0];
		for(auto to:v){
			s += str;
			s += v[1];
			s += to;
		}
		int a = press(s);
		if(a == i){
			str += v[0];
		}
		if(a == i + 1){
			str += v[1];
		}
		if(a == i - 1){
			str += v[2];
		}
	}
	
	
	if(N > 1){
		str += v[0];
		if(press(str) == N)return str;
		str.pop_back();
		str += v[1];
		if(press(str) == N)return str;
		str.pop_back();
		str += v[2];
	}
	
	
//	cout << str << "\n";
	
	
	return str;
}


/*
7
0 2 1
6 2 1
7 2 1
12 2 1
14 2 1
18 2 1
21 2 1
10
1
2
3
4
5
6
7
8
9
10
*/
 /*signed main()
{
//  freopen("seq.in", "r", stdin);
//  freopen("seq.out", "w", stdout);
    ios_base::sync_with_stdio(0);cin.tie(NULL);cout.tie(NULL);
    int tt=1;// cin >> tt;
    while(tt--)solve();

 
 
 ''
  '=/ l.;=p v
  0, \
  v 
  v\ 
   
   \v\\]
   ;[           8 ]
    
  }*/
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...