HDU 4023 (博弈 贪心 模拟) Game
如果硬要说这算是博弈题目的话,那这个博弈是不公平博弈(partizan games),因为双方面对同一个局面做出来的决策是不一样的。
我们平时做的博弈都是公平博弈(impartial games),所以在这道题里面,那些必胜必败状态,SG函数SG定理都派不上用场了。
但是,这道题是可以贪心的。
比如第一个图案对于Alice来说是安全稳定的,因为Bob不会跟他去抢位置,所以Alice可以省到最后去放。同样地,Bob可以将第2个图案省到最后再去放。
比如说第15个图案,如果能抢先占到的话会很划算的,因为如果一方占到,不光对方放不了了,自己还会多一个稳定位。
更详细的分析见这:http://www.cnblogs.com/staginner/archive/2011/09/10/2173317.html
我发现大家的思路都是按照这个来的。
1 #include <cstdio> 2 3 int a[16]; 4 5 int main() 6 { 7 //freopen("in.txt", "r", stdin); 8 9 int T; scanf("%d", &T); 10 for(int kase = 1; kase <= T; ++kase) 11 { 12 for(int i = 1; i <= 15; i++) scanf("%d", &a[i]); 13 int now = 0, A = a[1] * 2, B = a[2] * 2; 14 if(a[15] % 2 != 0) { A++; now = 1; } 15 int ta = a[5] + a[6], tb = a[3] + a[4]; 16 if(ta > tb)//Alice抢5,6, Bob抢3,4 17 { 18 ta -= tb; 19 if(ta % 2 != 0) 20 { 21 if(now == 0) A += ta/2 + 1; 22 else A += ta / 2; 23 now = 1 - now; 24 } 25 else A += ta / 2; 26 } 27 else if(ta < tb) 28 { 29 tb -= ta; 30 if(tb % 2 != 0) 31 { 32 if(now == 0) B += tb / 2; 33 else B += tb/2 + 1; 34 now = 1 - now; 35 } 36 else B += tb / 2; 37 } 38 //两人瓜分11,12,13,14 39 int t = a[11] + a[12] + a[13] + a[14]; 40 if(t % 2 != 0) now = 1 - now; 41 //Alice抢7,8, Bob抢9,10 42 ta = a[7] + a[8]; tb = a[9] + a[10]; 43 if(ta < tb) 44 { 45 tb -= ta; 46 if(tb % 2 != 0) 47 { 48 if(now == 0) B += tb/2 + 1; 49 else B += tb / 2; 50 now = 1 - now; 51 } 52 else B += tb / 2; 53 } 54 else if(ta > tb) 55 { 56 ta -= tb; 57 if(ta % 2 != 0) 58 { 59 if(now == 0) A += ta / 2; 60 else A += ta/2 + 1; 61 now = 1 - now; 62 } 63 else A += ta / 2; 64 } 65 66 bool win; 67 if(now == 0) win = B >= A ? false : true; 68 else win = A >= B ? true : false; 69 printf("Case #%d: %s\n", kase, win ? "Alice" : "Bob"); 70 } 71 72 return 0; 73 }
代码君
转载于:https://www.cnblogs.com/AOQNRMGYXLMV/p/4418387.html
HDU 4023 (博弈 贪心 模拟) Game相关推荐
- HDU - 6746 Civilization(贪心+模拟)
题目链接:点击查看 题目大意:中文题面 题目分析:一道比赛时写崩了的模拟,赛后参考别人的代码,发现原来这个题目可以写的如此简单 说会题目,n 只有 500 ,可以 n * n 枚举每个位置作为起点,对 ...
- HDU 3328 Flipper 栈 模拟
HDU 3328 Flipper 栈 模拟 首先想说,英语太烂这题读了很长时间才读懂......题意是说输入有几张牌,然后输入这些牌的初始状态(是面朝上还是面朝下),然后输入操作方式,R表示翻一下右边 ...
- 校内hu测(10.6T2,T3)(乱搞+贪心+模拟)
@liu_runda T2.便(then) [题目描述] 给出一个R*C的棋盘.共有R行C列,R*C个格子.现要在每个格子都填一个非负整数.使得任意一个2*2的正方形区域都满足这样的性质:左上角的数字 ...
- 【NOIP2013】积木大赛(差分数组,贪心模拟)
题目 原题链接 问题描述 分析 直观思路--贪心模拟:每次都处理最长正整数区段. 以[2,3,4,1,2][2,3,4,1,2][2,3,4,1,2]为例: [2,3,4,1,2]⟹[1,2,3,0, ...
- hdu 5248(二分+贪心)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5248 解题思路:这道题我原本的思路是动态规划,结果看到数很大,结果放弃了.然后想到二分,思路是对的,只 ...
- hdu 5246(贪心)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5246 解题思路:先排序,在采用贪心的方法,先给百小度找到合适的初始战斗力,找到比初始战斗力上限小的中最 ...
- CodeForces - 1362E Johnny and Grandmaster(贪心+模拟)
题目链接:点击查看 题目大意:给出一个基数 p ,再给出 n 个指数 k ,换句话说,现在有一个长度为 n 的序列,每个元素都是 p^k[ i ] ,现在需要将这个序列分到两个集合中,使得两个集合元素 ...
- CodeForces - 1321C Remove Adjacent(贪心+模拟)
题目链接:点击查看 题目大意:给出一个长度不超过100且只包含小写字母的字符串,现在规定,如果某个位置 i 的相邻位置存在着当前位置所代表字母的前一个字母,即 i - 1 和 i + 1 中存在着 a ...
- CodeForces - 1303D Fill The Bag(贪心+模拟)
题目链接:点击查看 题目大意:给出一个背包,容量为 k ,再给出 n 个物品,每个物品的大小保证是 2 的幂次,现在可以进行操作,使得一个物品分为大小相等的,且大小等于原物品一半的两个物品,比如一个物 ...
最新文章
- Chart.js-线形图分析(参数分析+例图)
- 技术是最求 买卖是境界
- php怎么输出3个函数和,PHP利用var_dump,var_export,print_r三个函数的区别示例
- Earliest PEP Algorithm Principles
- 从科技到“科技亲”,2019 IBM 中国论坛干货分享
- 贵州出台首部大数据地方法规 数据开放引入负面清单
- 冒泡排序C语言实现代码
- python处理word文档中表格 添加一列_Python操作word文档插入图片和表格的实例演示...
- 停电后文件变成二进制 修复_尝试并修补二进制启发
- android 与后台实时视频,android选择视频文件上传到后台服务器
- 解决Host key verification failed.
- 微信小程序实现预览图片
- 【Python】max()中key的使用
- linux postfix 虚拟,postfix虚拟别名域的配置
- 开发工程师的人生是这样的
- 【智能优化算法】基于阴阳对优化算法求解单目标优化问题附matlab代码 Yin Yang Pair Optimization
- Git同步原始repo的改动到fock的repo
- 如何设计大型集团一体化IT运维系统
- 数据挖掘技术特写(转)
- 从阿里P1到P7,他的阿里七年总结就是两个字