Submission #349483

#TimeUsernameProblemLanguageResultExecution timeMemory
349483ezdpCombo (IOI18_combo)C++14
100 / 100
54 ms556 KiB
#pragma GCC optimize ("O3")
#pragma GCC target ("sse4")

#include<bits/stdc++.h>
#include<combo.h>
#include<ext/pb_ds/assoc_container.hpp>

#define endl '\n'
#define pb push_back
#define fr first
#define sc second
#define ll long long int
#define ld long double
#define bit(idx) idx&(-idx)
#define bin(x) bitset<32>(x)
#define all(A) A.begin(), A.end()
#define de(x) cout << #x << " = " << x << endl;
#define row vector<ll>
#define row_matrix vector<ll>
#define matrix vector<row_matrix>
#define ordered_set_T ll

using namespace std;
using namespace __gnu_pbds;

typedef tree<ordered_set_T, null_type, less<ordered_set_T>, rb_tree_tag, tree_order_statistics_node_update> ordered_set;
/// find_by_order(x) -> x-th element in the set
/// order_of_key(x)  -> how many elements are smaller than x
/// insert(x)		 -> inserts x into the set

string guess_sequence(int N){
	string ans, qry;
	ll tmp = press("AB");
	if(tmp){
		tmp = press("A");
		if(tmp) ans += 'A';
		else 	ans += 'B';
	}
	else{
		tmp = press("X");
		if(tmp) ans += 'X';
		else 	ans += 'Y';
	}
	
	if(N == 1) return ans;
	
	vector<char> v;
	if(ans != "A") v.pb('A'); 
	if(ans != "B") v.pb('B');
	if(ans != "X") v.pb('X');
	if(ans != "Y") v.pb('Y');
	
	for(int i = 1; i + 1 < N; i ++){
		qry = ans; qry += v[0];
		qry += ans; qry += v[1]; qry += v[0];
		qry += ans; qry += v[1]; qry += v[1];
		qry += ans; qry += v[1]; qry += v[2];
		tmp = press(qry);
		if(tmp == ans.size() + 0) ans += v[2];
		if(tmp == ans.size() + 1) ans += v[0];
		if(tmp == ans.size() + 2) ans += v[1];
	}
	
	qry = ans; qry += v[0];
	tmp = press(qry);
	if(tmp == N) return qry;
	
	qry = ans; qry += v[1];
	tmp = press(qry);
	if(tmp == N) return qry;
	
	qry = ans; qry += v[2];
	return qry;
}
/**

*/

Compilation message (stderr)

combo.cpp: In function 'std::string guess_sequence(int)':
combo.cpp:59:10: warning: comparison of integer expressions of different signedness: 'long long int' and 'std::__cxx11::basic_string<char>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   59 |   if(tmp == ans.size() + 0) ans += v[2];
      |      ~~~~^~~~~~~~~~~~~~~~~
combo.cpp:60:10: warning: comparison of integer expressions of different signedness: 'long long int' and 'std::__cxx11::basic_string<char>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   60 |   if(tmp == ans.size() + 1) ans += v[0];
      |      ~~~~^~~~~~~~~~~~~~~~~
combo.cpp:61:10: warning: comparison of integer expressions of different signedness: 'long long int' and 'std::__cxx11::basic_string<char>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   61 |   if(tmp == ans.size() + 2) ans += v[1];
      |      ~~~~^~~~~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...