#include <bits/stdc++.h>
#define int long long
int n, testcases;
std::string type;
// Paper = 0
// Rock = 1;
char ruch(char ours) {
std::cout << ours;
std::cout.flush();
char opp;
std::cin >> opp;
return opp;
}
char jaki(char x) {
if (x == '0')
return 'P';
else
return 'K';
}
int win(char ours, char opp) {
if (ours == 'K') {
if (opp == 'P')
return -1;
else if (opp = 'K')
return 0;
return 1;
} else if (ours == 'N') {
if (opp == 'P')
return 1;
else if (opp = 'K')
return -1;
return 0;
} else { // ours == 'P
if (opp == 'P')
return 0;
else if (opp = 'K')
return 1;
return -1;
}
}
char decode(char opp) {
if (opp == 'P')
return '0';
return '1';
}
void Algosia(std::string s) {
int balans = 0;
std::string ans;
for (int i = 1; i <= n * 2; i++) {
if (i <= n) {
char ours = jaki(s[i - 1]);
char opp = ruch(ours);
balans += win(ours, opp);
} else {
char ours, opp;
if (balans == 1)
ours = 'K';
else
ours = 'P';
opp = ruch(ours);
ans += decode(opp);
balans += win(ours, opp);
}
}
assert(ans.size() == n);
// std::cerr << "alicja " << ans << "\n" << s << "\n";
std::cout << "! " << ans;
std::cout.flush();
}
void Bajtek(std::string s) {
int balans = 0;
std::string ans;
for (int i = 1; i <= n * 2; i++) {
if (i > n) {
char ours = jaki(s[i - n - 1]);
char opp = ruch(ours);
balans += win(ours, opp);
} else {
char ours, opp;
if (balans == 1)
ours = 'K';
else
ours = 'P';
opp = ruch(ours);
ans += decode(opp);
balans += win(ours, opp);
}
}
// std::cerr << "bajtek " << ans << "\n" << s << "\n";
std::cout << "! " << ans;
std::cout.flush();
}
int32_t main() {
std::cin >> type >> n >> testcases;
while (testcases--) {
std::string s;
std::cin >> s;
if (type == "Algosia")
Algosia(s);
else
Bajtek(s);
}
return 0;
}
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 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 | #include <bits/stdc++.h> #define int long long int n, testcases; std::string type; // Paper = 0 // Rock = 1; char ruch(char ours) { std::cout << ours; std::cout.flush(); char opp; std::cin >> opp; return opp; } char jaki(char x) { if (x == '0') return 'P'; else return 'K'; } int win(char ours, char opp) { if (ours == 'K') { if (opp == 'P') return -1; else if (opp = 'K') return 0; return 1; } else if (ours == 'N') { if (opp == 'P') return 1; else if (opp = 'K') return -1; return 0; } else { // ours == 'P if (opp == 'P') return 0; else if (opp = 'K') return 1; return -1; } } char decode(char opp) { if (opp == 'P') return '0'; return '1'; } void Algosia(std::string s) { int balans = 0; std::string ans; for (int i = 1; i <= n * 2; i++) { if (i <= n) { char ours = jaki(s[i - 1]); char opp = ruch(ours); balans += win(ours, opp); } else { char ours, opp; if (balans == 1) ours = 'K'; else ours = 'P'; opp = ruch(ours); ans += decode(opp); balans += win(ours, opp); } } assert(ans.size() == n); // std::cerr << "alicja " << ans << "\n" << s << "\n"; std::cout << "! " << ans; std::cout.flush(); } void Bajtek(std::string s) { int balans = 0; std::string ans; for (int i = 1; i <= n * 2; i++) { if (i > n) { char ours = jaki(s[i - n - 1]); char opp = ruch(ours); balans += win(ours, opp); } else { char ours, opp; if (balans == 1) ours = 'K'; else ours = 'P'; opp = ruch(ours); ans += decode(opp); balans += win(ours, opp); } } // std::cerr << "bajtek " << ans << "\n" << s << "\n"; std::cout << "! " << ans; std::cout.flush(); } int32_t main() { std::cin >> type >> n >> testcases; while (testcases--) { std::string s; std::cin >> s; if (type == "Algosia") Algosia(s); else Bajtek(s); } return 0; } |
English