简单博弈(hdu 2188 && 4764 && 2149 && 3863 && 3951 && 1564)
来源:互联网 发布:植物名称查询软件 编辑:程序博客网 时间:2024/06/06 04:33
2188题目:点击打开链接
赤裸裸的巴什博弈。
#include <stdio.h>int main (void){int c;scanf("%d", &c);while(c --){int n, m;scanf("%d %d", &n, &m);if(n % (m + 1) == 0){printf("Rabbit\n");}elseprintf("Grass\n");}return 0;}
4764题目:点击打开链接
两个人轮流写数字,谁先超过给定的数n谁输。
题目说1 <= Y - X <= k,也就是 1 + X <= Y <= k + X,因为是累加,所以可以看成X和Y的范围是 1<= Y, X <= k,所以这样就转化为谁取到最后谁输的巴什博弈。仔细考虑一下,巴什博弈是每次累加着取,而这题是在对方写的数字的基础上取,其实两种情况是一样的。
胜的一方必须是拿到N-1这个数 那么输的一方肯定是在 N-k-1 ~ N-2 这些数中取 那么赢的一方必然取到了N-k-2这个数
所以一次递归推算 先手取到这些特殊数的必赢 这些数为 N-1、N-1-(k+1)、N-1-2(k+1) ......
所以得如果N-1 能够整除 k+1 则后手赢 否则先手赢
当然得注意N=1 的情况 和k>=N 的情况
#include <stdio.h>int main (void){int n, k;while(scanf("%d %d", &n, &k) != EOF){if(n == 0 && k == 0)break;if((n - 1) % (k + 1) != 0)printf("Tang\n");//先手赢elseprintf("Jiang\n");}return 0;}
2149题目:点击打开链接
这题就是巴什博弈的一个扩展。
#include <stdio.h>int main (void){int m, n;while(scanf("%d %d", &m, &n) != EOF){int i;if(m % (n + 1) == 0)//先手必输 printf("none");else{int f = 0;if(n < m)//只要留给对方(n +1)的倍数个就能赢,所以将除以(n + 1)的余数个都拿走 printf("%d", m % (n + 1));if(n >= m){for(i = m; i <= n; i ++){if(f == 0){f = 1;printf("%d", i);}elseprintf(" %d", i);}}}printf("\n");}return 0;}
3863题目:点击打开链接
这题……………………特别不想吐槽………………题目意思就是先手从左到右连接蓝点,后手从上到下连接红点,轮流进行,谁先对面谁赢。想了半天想不太出来,结果居然是是先手一定会胜,因为先手后手完成一样的任务,先手比后手先走一步,必定是赢的。
#include <stdio.h>int main (void){int n;while(scanf("%d", &n) != EOF){if(n == -1)break;elseprintf("I bet on Oregon Maple~\n");}return 0;}
3951题目:点击打开链接
环形博弈,把硬币围成一个圈,然后每次可以取一个或者连续的2到k个,这题挺像NYOJ上取石子(七)的,我刚开始没有写m >= k的情况所以WA了,如果每次最多只能去一个,那么就根据硬币个数的奇偶性来判断,如果给的k大于1,那么后手一定胜,因为后手可以根据先手所取的,将剩下的硬币平分,就一颗保证一定赢。
#include <stdio.h>int main (void){int t, c = 0;scanf("%d", &t);while(t --){c ++;int n, m;scanf("%d %d", &n, &m);printf("Case %d: ", c);if(m >= n){//这里别忘 printf("first\n");}else if(m == 1){if(n % 2 == 0)printf("second\n");elseprintf("first\n");}elseprintf("second\n");}return 0;}
1564题目:点击打开链接
直接判断奇偶性,我做的时候就抱着试一试的心态交的代码……没想到就过了……
#include <stdio.h>int main (void){int n;while(scanf("%d", &n) != EOF){if(n == 0)break;if(n % 2 == 0)printf("8600\n");elseprintf("ailyanlu\n");}return 0;}
总结一下,博弈太差。
- 简单博弈(hdu 2188 && 4764 && 2149 && 3863 && 3951 && 1564)
- HDU 3863 No Gambling 简单博弈
- HDU 3951 Coin Game 简单博弈
- HDU 4764 Stone(简单博弈)
- HDU 1564 Play a game 简单博弈
- hdu 2897简单博弈
- HDU 4642 简单博弈
- hdu,poj博弈简单题
- hdu 1907 - John(简单博弈)
- hdu 1846 (简单博弈题)
- 博弈论 (简单博弈分析)——Coin Game ( HDU 3951 )
- HDU 2149 Public Sale【取石子类简单博弈】
- HDU 2188 选拔志愿者(简单博弈+记忆化)
- hdu 2188 简单博弈 巴什博奕(Bash Game)----同1846
- hdu-4764 博弈
- HDU 4764 博弈
- HDU 4764-Stone(博弈)
- hdu 3951(博弈,成环)
- java-JDBC插入Clob字段
- openmax_il
- uestc Caruta (字典树)
- 【Android】Android自动开关机实现
- RTL芯片识别
- 简单博弈(hdu 2188 && 4764 && 2149 && 3863 && 3951 && 1564)
- 编码UNICODE,GBK,UTF-8区别
- nyist 290 动物统计加强版(字典树)
- 爱立信面试前的GitHub项目如何上传
- cbClsExtra GetClassInfo或GetClassInfoEx可以获取WNDCLASS或者WNDCLASSEX结构
- 运用UITextFieldDelegate完成,点击键盘的右下角的next,光标进入下一文本框,然后再点击Done,收回键盘
- 位模式
- java读入数据的几种方式
- Ubuntu12.04编译安装Boost1.55