又是一道博大精深的博弈题目。
已经说了 巴什博弈,威佐夫博弈,尼姆博弈,SG函数,找规律的博弈,这次和找规律有点类似——对称博弈。
一般都是圆啊方啊什么的。
对于这道题而言,可以有三种情况:
①k等于1 一次最多只能拿1个(每堆只有一个),那就是看奇偶了。
②n≤k 这种情况,那肯定先拿的赢。
③ 这条就是对称博弈了, 除了上述两种情况外的情况(n>k && k!=1)
这时候,无论你第一个人拿什么,怎么拿,后手的人完全可以在第一个人拿的对称的地方做同样的事情。
这样,后手就一定会取得胜利,因为最后一步是后手走的。
第三条自己在本上画一画就不难发现了。
恩,博弈论,暂时就先到这里了。。。。
#include<stdio.h> int main() { int t,i,n,k; scanf("%d",&t); for(i=1;i<=t;i++){ scanf("%d%d",&n,&k); printf("Case %d: ",i); if(k==1){ if(n&1) printf("first\n"); else printf("second\n"); } else if(n<=k) printf("first\n"); else printf("second\n"); } return 0; }
时间: 2024-10-29 19:10:12