hdu 3544 Alice's Game
#include<stdio.h>
int main()
{
int t,n;
__int64 sum1,sum2;
int i,j,a,b;
scanf("%d",&t);
for(i=;i<=t;i++)
{
scanf("%d",&n);
sum1=sum2=;
for(j=;j<n;j++)
{
scanf("%d%d",&a,&b);
while(a>&&b>)
{
a>>=;
b>>=;
}
if(a>)sum1+=a;
else sum2+=b;
}
//printf("%d %d ",sum1,sum2);
printf("Case %d: ",i);
if(sum1>sum2)printf("Alice\n");
else printf("Bob\n");
} return ;
}
这题是一个组合游戏,但是并不是一个对等的组合游戏,所以试图使用 SG 函数相关知
识解答是会面临巨大的挑战的。 书中本题的做法描述得十分简单,当然对于有这类组合游戏
知识的同学来说这题也确实十分简单,如果没有相关背景知识,也没有关系,我们来慢慢分
析这道题目。
要成功地解答本题需要认真地分析这个游戏的规则,我们首先来考虑一些简单情况。
(1) 只有 n*1 和 1*m 的巧克力的时候
(2) 2*2 的巧克力
(3) 2*3 和 3*2 的巧克力
(4) n*2 和 2*m 的巧克力
(5) n*3 和 3*m 的巧克力
(6) 很多巧克力在一起的情况
我们来一个一个分析这些情况,对于 n*1 和 1*m 的巧克力,显然 n*1 的巧克力对 alice
有利,而 1*m 的巧克力对 bob 有利。假设 n*1 对于 alice 有 n-1 的 HP 贡献,而 1*m 对于 bob
有 m-1 的 HP 贡献。至于谁胜利?自然是谁 HP 多谁就胜利,当然考虑到先 alice 先扣 HP,
所以如果 HP 一样多, alice 也输了。 为了方便,我们定义 alice 的 HP 为正, bob 的 HP 为负。
于是这个局面就可以通过简单的加法获得总的 HP 了。
那 2*2 的巧克力呢,认真分析就可以发现 2*2 在这个游戏中纯属幻觉! 谁也不愿意先拿
他开刀,切一道送了对方两次切的机会,而自己却只切了一刀。于是我们可以说,2*2 的巧
克力值 0 的 HP。
同样 2*3 和 3*2 的巧克力也因为同样的道理就这么被无情地抛弃了。
对于 n*2 的巧克力,根据直觉 alice 应该感到很高兴(当然不是 1*2), bob 自然不会傻
到来切这个巧克力,于是 alice 自己要想办法自己尽量多切几刀, 注意到切出 1*2 的巧克力
是很不利的事情,于是每次都切 2*2 的,可以切(n/2)-1 刀。 于是这就是 n*2 的巧克力的 HP
贡献了。2*m 以及 n*3,3*m 的就不再赘述,都是一样。
以此类推,4*4,8*8,16*16,都是比较关键的巧克力。
弄一个表吧,再找不到规律„„

好像,把这些 HP 值加起来,我们这题就做完了? Oh yeah.
!!!!来自官方解题报告
hdu 3544 Alice's Game的更多相关文章
- hdu 3544 Alice's Game 博弈论
博弈论+二分! 后一人会尽量选前一人切小的一块切!! 代码如下: #include<iostream> #include<stdio.h> #define I1(x) scan ...
- hdu 4122 Alice's mooncake shop(单调队列)
题目链接:hdu 4122 Alice's mooncake shop 题意: 有n个订单和可以在m小时内制作月饼 接下来是n个订单的信息:需要在mon月,d日,year年,h小时交付订单r个月饼 接 ...
- HDU 3544 (不平等博弈) Alice's Game
切巧克力的游戏,想得还是不是太明白. 后者会尽量选前着切后其中小的一块来切,那么先手须尽量取中间来切. So?题解都是这么一句话,不知道是真懂了还是从别人那抄过来的. 后来找到一个官方题解,分析得比较 ...
- HDU 4122 Alice's mooncake shop 单调队列优化dp
Alice's mooncake shop Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://acm.hdu.edu.cn/showproblem ...
- HDU 4791 Alice's Print Service 思路,dp 难度:2
A - Alice's Print Service Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & ...
- hdu 4111 Alice and Bob 记忆化搜索 博弈论
Alice and Bob Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://acm.hdu.edu.cn/showproblem.php?pi ...
- HDU 5054 Alice and Bob(数学)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5054 Problem Description Bob and Alice got separated ...
- HDU 4791 Alice's Print Service(2013长沙区域赛现场赛A题)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4791 解题报告:打印店提供打印纸张服务,需要收取费用,输入格式是s1 p1 s2 p2 s3 p3.. ...
- hdu 4268 Alice and Bob
Alice and Bob Time Limit : 10000/5000ms (Java/Other) Memory Limit : 32768/32768K (Java/Other) Tota ...
随机推荐
- 转:Java HashMap实现详解
Java HashMap实现详解 转:http://beyond99.blog.51cto.com/1469451/429789 1. HashMap概述: HashMap是基于哈希表的M ...
- webBrowser执行js的方法,并返回值,c#后台取值
private void Form1_Load(object sender, EventArgs e) { webBrowser1.Navigate(Application.StartupPath + ...
- 【转】HttpServletRequest.getParameter() &HttpServletRequest.getAttribute() 区别
Ref: HttpServletRequest的getParameter和getAttribute方法有什么区别 具体如下几点: (1)HttpServletRequest类有setAttribute ...
- 【Qt】Qt之自定义搜索框【转】
简述 关于搜索框,大家都经常接触.例如:浏览器搜索.Windows资源管理器搜索等. 当然,这些对于Qt实现来说毫无压力,只要思路清晰,分分钟搞定. 简述 效果 细节分析 Coding 源码下载 效果 ...
- 基于PinnedSectionListView实现联系人通讯录并且点击打电话
PinnedSectionListView具体下载地址.使用方法和注意事项:http://www.cnblogs.com/zzw1994/p/4997601.html 怎么根据联系人姓名首字符顺序读取 ...
- jqueryGrid 内置的onclickSubmit afterSubmit
$(document).ready(function() { $('#jpgCustomers').jqGrid({ //url from wich data should be requested ...
- gif修改背景透明
1.用ImageReady打开,将选中所有帧,右键选择“恢复为背景”. 2.打开“颜色板”,点击左下角的惊叹号,用吸色器点击背景,颜色板自动选中了背景色,将其映射为透明. 3.文件->将优化结果 ...
- VS2010打开VS2012解决方法
VS2012中对C#的支持度非常好,不管是编写方便程度(不需要插件就能高亮代码及代码自动提示功能),还对MFC的一些功能优化很多. 我们可以修改两个工程文件来把VS2012的工程文件一直到VS2010 ...
- java递归方法
一个方法体内调用他自身,称为方法递归. 方法递归是一种隐式的循环,Tahiti重复执行某段代码,但这种重复执行无需循环控制 /* Author:oliver QIN DATE:2015-12-19 D ...
- Java 图形编程 二:布局管理器之顺序布局
package second; import java.awt.*; import java.awt.event.WindowAdapter; import java.awt.event.Window ...