#include <bits/stdc++.h>
using namespace std;
#define rep(i,a,n) for (int i=a;i<n;i++)
#define per(i,a,n) for (int i=n-1;i>=a;i--)
#define pb push_back
#define mp make_pair
#define all(x) (x).begin(),(x).end()
#define fi first
#define se second
#define SZ(x) ((int)(x).size())
typedef vector<int> VI;
typedef long long ll;
typedef pair<int,int> PII;
typedef double db;
//mt19937 mrand(random_device{}());
const ll mod=1000000007;
//int rnd(int x) { return mrand() % x;}
ll powmod(ll a,ll b) {ll res=1;a%=mod; assert(b>=0); for(;b;b>>=1){if(b&1)res=res*a%mod;a=a*a%mod;}return res;}
int gcd(int a,int b) { return b?gcd(b,a%b):a;}
// head
const int MAXL=25,N=5e3+5;
#define INF 0x3f3f3f3f
template<class T> inline void read(T &x) {
x=0; int c=getchar(),f=1;
for (;!isdigit(c);c=getchar()) if (c==45) f=-1;
for (;isdigit(c);c=getchar()) (x*=10)+=f*(c-'0');
}
char person[MAXL],my_str[N],other_str[N];
void send_move(char c) {
printf("%c\n",c);
fflush(stdout);
return;
}
char read_move() {
char c;
scanf(" %c",&c);
return c;
}
int main() {
if (scanf("%s",person)==EOF) return 0;
bool is_algosia=(strcmp(person,"Algosia")==0);
int n,t;
scanf("%d%d",&n,&t);
while (t--) {
int score_diff=0;
scanf("%s",my_str);
int ptr_a=0,ptr_b=0;
rep(i,0,2*n) {
char my_move;
if (is_algosia) {
if (i%2==0) {
if (my_str[ptr_a]=='0') my_move='P';
else my_move='K';
} else {
if (score_diff<=0) my_move='P';
else my_move='K';
}
send_move(my_move);
char other_move=read_move();
if (my_move=='P'&&other_move=='K') score_diff++;
else if (my_move=='K'&&other_move=='P') score_diff--;
if (i%2==0) ptr_a++;
else {
other_str[ptr_b]=(other_move=='P')?'0':'1';
ptr_b++;
}
} else {
if (i&1) {
if (my_str[ptr_b]=='0') my_move='P';
else my_move='K';
} else {
if (score_diff>=0) my_move='P';
else my_move='K';
}
send_move(my_move);
char other_move=read_move();
if (my_move=='P'&&other_move=='K') score_diff--;
else if (my_move=='K'&&other_move=='P') score_diff++;
if (i&1) ptr_b++;
else {
other_str[ptr_a]=(other_move=='P')?'0':'1';
ptr_a++;
}
}
}
other_str[n]='\0';
printf("! %s\n",other_str);
fflush(stdout);
}
}
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 | #include <bits/stdc++.h> using namespace std; #define rep(i,a,n) for (int i=a;i<n;i++) #define per(i,a,n) for (int i=n-1;i>=a;i--) #define pb push_back #define mp make_pair #define all(x) (x).begin(),(x).end() #define fi first #define se second #define SZ(x) ((int)(x).size()) typedef vector<int> VI; typedef long long ll; typedef pair<int,int> PII; typedef double db; //mt19937 mrand(random_device{}()); const ll mod=1000000007; //int rnd(int x) { return mrand() % x;} ll powmod(ll a,ll b) {ll res=1;a%=mod; assert(b>=0); for(;b;b>>=1){if(b&1)res=res*a%mod;a=a*a%mod;}return res;} int gcd(int a,int b) { return b?gcd(b,a%b):a;} // head const int MAXL=25,N=5e3+5; #define INF 0x3f3f3f3f template<class T> inline void read(T &x) { x=0; int c=getchar(),f=1; for (;!isdigit(c);c=getchar()) if (c==45) f=-1; for (;isdigit(c);c=getchar()) (x*=10)+=f*(c-'0'); } char person[MAXL],my_str[N],other_str[N]; void send_move(char c) { printf("%c\n",c); fflush(stdout); return; } char read_move() { char c; scanf(" %c",&c); return c; } int main() { if (scanf("%s",person)==EOF) return 0; bool is_algosia=(strcmp(person,"Algosia")==0); int n,t; scanf("%d%d",&n,&t); while (t--) { int score_diff=0; scanf("%s",my_str); int ptr_a=0,ptr_b=0; rep(i,0,2*n) { char my_move; if (is_algosia) { if (i%2==0) { if (my_str[ptr_a]=='0') my_move='P'; else my_move='K'; } else { if (score_diff<=0) my_move='P'; else my_move='K'; } send_move(my_move); char other_move=read_move(); if (my_move=='P'&&other_move=='K') score_diff++; else if (my_move=='K'&&other_move=='P') score_diff--; if (i%2==0) ptr_a++; else { other_str[ptr_b]=(other_move=='P')?'0':'1'; ptr_b++; } } else { if (i&1) { if (my_str[ptr_b]=='0') my_move='P'; else my_move='K'; } else { if (score_diff>=0) my_move='P'; else my_move='K'; } send_move(my_move); char other_move=read_move(); if (my_move=='P'&&other_move=='K') score_diff--; else if (my_move=='K'&&other_move=='P') score_diff++; if (i&1) ptr_b++; else { other_str[ptr_a]=(other_move=='P')?'0':'1'; ptr_a++; } } } other_str[n]='\0'; printf("! %s\n",other_str); fflush(stdout); } } |
English