Submission #1137598

#TimeUsernameProblemLanguageResultExecution timeMemory
1137598Jawad_Akbar_JJCOVID tests (CEOI24_covid)C++20
64.35 / 100
681 ms408 KiB
#include <iostream>
#include <vector>

using namespace std;
long double p, p2;
char c;

bool isPositive(int n, int l, int r){
	string s(n, '0');
	cout<<"Q ";
	for (int j=1;j<=n;j++) 
		if (j >= l and j <= r) s[j-1] = '1';
	cout<<s<<endl;
	cin>>c;

	return (c == 'P');
}


void solve1(int n){
	vector<int> vec(n + 1, 0);
	for (int i=1, lp = n + 1;i<=n;){
		if (lp == i){
			vec[i] = 1;
			i++;
			lp = n + 1;
			continue;
		}
		int b = 31 - __builtin_clz(lp - i);
		if (isPositive(n, i, i + (1<<b) - 1))
			lp = i + (1<<b) - 1;
		else
			i += (1<<b);
	}

	cout<<"A ";
	for (int i=1;i<=n;i++) cout<<vec[i];
	cout<<endl;	
	cin>>c;
	if (c == 'W') exit(0);
}


void solve3(int n){
	vector<int> vec(n + 1, 0);
	for (int i=1, lp = n + 1;i<=n;){
		if (lp == i){
			vec[i] = 1;
			i++;
			lp = n + 1;
			continue;
		}

		if (lp == n + 1){
			p2 = 1;
			int nw;
			for (nw=i;nw<=n;nw++){
				p2 *= (1 - p);
				if (p2 <= 0.4)
					break;
			}
			nw = min(nw, n);
			if (isPositive(n, i, nw))
				lp = nw;
			else
				i = nw + 1;
			continue;
		}

		int b = 31 - __builtin_clz(lp - i);
		if (isPositive(n, i, i + (1<<b) - 1))
			lp = i + (1<<b) - 1;
		else
			i += (1<<b);
	}

	cout<<"A ";
	for (int i=1;i<=n;i++) cout<<vec[i];
	cout<<endl;	
	cin>>c;
	if (c == 'W') exit(0);
}

void solve4(int n){
	vector<int> vec(n + 1, 0);
	for (int i=1, lp = n + 1;i<=n;){
		if (lp == i){
			vec[i] = 1;
			i++;
			lp = n + 1;
			continue;
		}

		if (lp == n + 1){
			p2 = 1;
			int nw;
			for (nw=i;nw<=n;nw++){
				p2 *= (1 - p);
				if (p2 <= 0.4)
					break;
			}
			nw = min(nw, n);
			if (isPositive(n, i, nw))
				lp = nw;
			else
				i = nw + 1;
			continue;
		}

		int b = 31 - __builtin_clz(lp - i);
		if (isPositive(n, i, i + (1<<b) - 1))
			lp = i + (1<<b) - 1;
		else
			i += (1<<b);
	}

	cout<<"A ";
	for (int i=1;i<=n;i++) cout<<vec[i];
	cout<<endl;	
	cin>>c;
	if (c == 'W') exit(0);
}
void solve5(int n){
	vector<int> vec(n + 1, 0);
	for (int i=1, lp = n + 1;i<=n;){
		if (lp == i){
			vec[i] = 1;
			i++;
			lp = n + 1;
			continue;
		}

		if (lp == n + 1){
			p2 = 1;
			int nw;
			for (nw=i;nw<=n;nw++){
				p2 *= (1 - p);
				if (p2 <= 0.4)
					break;
			}
			nw = min(nw, n);
			if (isPositive(n, i, nw))
				lp = nw;
			else
				i = nw + 1;
			continue;
		}

		int b = 31 - __builtin_clz(lp - i);
		if (isPositive(n, i, i + (1<<b) - 1))
			lp = i + (1<<b) - 1;
		else
			i += (1<<b);
	}

	cout<<"A ";
	for (int i=1;i<=n;i++) cout<<vec[i];
	cout<<endl;	
	cin>>c;
	if (c == 'W') exit(0);
}
void solve6(int n){
	vector<int> vec(n + 1, 0);
	for (int i=1, lp = n + 1;i<=n;){
		if (lp == i){
			vec[i] = 1;
			i++;
			lp = n + 1;
			continue;
		}

		if (lp == n + 1){
			p2 = 1;
			int nw;
			for (nw=i;nw<=n;nw++){
				p2 *= (1 - p);
				if (p2 <= 0.4)
					break;
			}
			nw = min(nw, n);
			if (isPositive(n, i, nw))
				lp = nw;
			else
				i = nw + 1;
			continue;
		}

		int b = 31 - __builtin_clz(lp - i);
		if (isPositive(n, i, i + (1<<b) - 1))
			lp = i + (1<<b) - 1;
		else
			i += (1<<b);
	}

	cout<<"A ";
	for (int i=1;i<=n;i++) cout<<vec[i];
	cout<<endl;	
	cin>>c;
	if (c == 'W') exit(0);
}

void solve7(int n){
	vector<int> vec(n + 1, 0);
	for (int i=1, lp = n + 1;i<=n;){
		if (lp == i){
			vec[i] = 1;
			i++;
			lp = n + 1;
			continue;
		}

		if (lp == n + 1){
			p2 = 1;
			int nw;
			for (nw=i;nw<=n;nw++){
				p2 *= (1 - p);
				if (p2 <= 0.5)
					break;
			}
			nw = min(nw, n);
			if (isPositive(n, i, nw))
				lp = nw;
			else
				i = nw + 1;
			continue;
		}

		int b = 31 - __builtin_clz(lp - i);
		if (isPositive(n, i, i + (1<<b) - 1))
			lp = i + (1<<b) - 1;
		else
			i += (1<<b);
	}

	cout<<"A ";
	for (int i=1;i<=n;i++) cout<<vec[i];
	cout<<endl;	
	cin>>c;
	if (c == 'W') exit(0);
}
void solve8(int n){
	vector<int> vec(n + 1, 0);
	for (int i=1, lp = n + 1;i<=n;){
		if (lp == i){
			vec[i] = 1;
			i++;
			lp = n + 1;
			continue;
		}

		if (lp == n + 1){
			p2 = 1;
			int nw;
			for (nw=i;nw<=n;nw++){
				p2 *= (1 - p);
				if (p2 <= 0.4)
					break;
			}
			nw = min(nw, n);
			if (isPositive(n, i, nw))
				lp = nw;
			else
				i = nw + 1;
			continue;
		}

		int b = 31 - __builtin_clz(lp - i);
		if (isPositive(n, i, i + (1<<b) - 1))
			lp = i + (1<<b) - 1;
		else
			i += (1<<b);
	}

	cout<<"A ";
	for (int i=1;i<=n;i++) cout<<vec[i];
	cout<<endl;	
	cin>>c;
	if (c == 'W') exit(0);
}

void solve9(int n){
	vector<int> vec(n + 1, 0);
	for (int i=1, lp = n + 1;i<=n;){
		if (lp == i){
			vec[i] = 1;
			i++;
			lp = n + 1;
			continue;
		}

		if (lp == n + 1){
			p2 = 1;
			int nw;
			for (nw=i;nw<=n;nw++){
				p2 *= (1 - p);
				if (p2 <= 0.5)
					break;
			}
			nw = min(nw, n);
			if (isPositive(n, i, nw))
				lp = nw;
			else
				i = nw + 1;
			continue;
		}

		int b = 31 - __builtin_clz(lp - i);
		if (isPositive(n, i, i + (1<<b) - 1))
			lp = i + (1<<b) - 1;
		else
			i += (1<<b);
	}

	cout<<"A ";
	for (int i=1;i<=n;i++) cout<<vec[i];
	cout<<endl;	
	cin>>c;
	if (c == 'W') exit(0);
}


int main(){
	int n, t;
	cin>>n>>p>>t;

	if (t == 1)
		return 0;

	while (t--){
		if (p <= 0.005256) solve1(n);
		else if (p == 0.011546) solve3(n);
		else if (p == 0.028545) solve4(n);
		else if (p == 0.039856) solve5(n);
		else if (p == 0.068648) solve6(n);
		else if (p == 0.104571) solve7(n);
		else if (p == 0.158765) solve8(n);
		else solve9(n);
	}
}

#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...