题目链接
题意
有(n)张牌,两人依次摸牌,每次摸的张数只能是(2)的幂次,最后没牌可摸的人为负。问先手会赢还是会输?
思路
0 1 2 3 4 5 6 7 8 9 10 11 ……
P N N P N N P N N P N N ……
可归纳出:(n\%3==0)时为(P),(n\%3 eq 0)时为(N).
证明:
因为(2^k\%3
eq 0),
所以
- (n\%3==0)只能由((n-2^k)\%3 eq 0)转移而来,而((n-2^k)\%3 eq 0)的状态全部为(N),故(n\%3==0)的状态为(P).
- (n\%3 eq 0)能由某个((n-2^k)\%3==0)转移而来,又因为((n-2^k)\%3==0)的状态为(P),故(n\%3 eq 0)的状态为(N).
Code
#include <bits/stdc++.h>
using namespace std;
typedef long long LL;
int main() {
int n;
while (scanf("%d", &n) != EOF) {
n %= 3;
if (n) puts("Kiki");
else puts("Cici");
}
return 0;
}