#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.6)
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.6)
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.2) solve8(n);
else solve9(n);
}
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |