HDU 1847 Good Luck in CET-4 Everybody! 巴什博弈
阿新 • • 發佈:2018-12-02
可以老老實實用 SG 函式求出來這個是常規解法
#include <bits/stdc++.h>
using namespace std;
const int maxn = 2050;
int sg[maxn];
int used[maxn];
void getsg() {
sg[0] = 0;
for (int i = 1; i < 1001; ++i) {
for (int t = 1; t <= i; t*=2) {
used[sg[i-t]] = i;
}
for (int k = 0; ;++k) {
if (used[ k] != i) {
sg[i] = k;
break;
}
}
}
}
int main() {
getsg();
int n;
while (cin >> n) {
if (sg[n])
cout << "Kiki" << endl;
else
cout << "Cici" << endl;
}
return 0;
}
但是如果玄學你一點你會發現 n%3 == 0 的時候會輸, 其他情況都會贏。
若果你手裡的牌是 3的倍數, 那麼取完之後 %3 是 1 或者 2, 對手一定可以取 1 或者 2 恢復 3 的倍數。這樣下去你就輸了。
如果 n % 3 != 0你就可以取 1 或者 2 把它變成 3 的倍數,這樣對手就輸了。
#include <bits/stdc++.h>
using namespace std;
int main() {
int n;
while (cin >> n) {
if (n%3)
cout << "Kiki" << endl;
else
cout << "Cici" << endl;
}
return 0;
}