我们接触到了第二个博弈,巴什博弈。
只有一堆n个物品,两个人轮流从这堆物品中取物,规定每次至少取一个,最多取m个.最后取光者得胜.
n = (m+1)r+s , (r为任意自然数,s≤m), 即n%(m+1) != 0, 则先取者肯定获胜。
所以你在每次留给对手m+1的倍数就可以了。
HDU1847 巴什博弈的简单应用。
#include<iostream>
#include<cstdio>
#include<string.h>
#include<cstring>
#include<string>
#include<stack>
#include<set>
#include<algorithm>
#include<cmath>
#include<vector>
#include<map>
#define LOCAL
#define ll long long
#define lll unsigned long long
#define MAX 1000009
#define eps 1e-8
#define INF 0xfffffff
#define mod 1000000007
using namespace std;
/*
题意:巴什博弈
想法: n = (m+1)r+s , (r为任意自然数,s≤m), 即n%(m+1) != 0, 则先取者肯定获胜。
ps:http://www.cnblogs.com/cchun/archive/2011/08/10/2520096.html
*/
int main()
{
//#ifdef LOCAL
// freopen("date.in","r",stdin);
//freopen("date.out","w",stdout);
// #endif // LOCAL
int n;
while(~scanf("%d",&n))
{
if(n%3!=0)
puts("Kiki");
else
puts("Cici");
}
return 0;
}
1656

被折叠的 条评论
为什么被折叠?



