HDU 3544 (不平等博弈) Alice's Game

切巧克力的游戏,想得还是不是太明白。

后者会尽量选前着切后其中小的一块来切,那么先手须尽量取中间来切。

So?题解都是这么一句话,不知道是真懂了还是从别人那抄过来的。

后来找到一个官方题解,分析得比较认真,但我这智商还是没懂太多,QAQ

本题我抄袭自《Winning Ways for your Mathematical Plays》 ,一本关于游戏论的科
普类图书。
这题是一个组合游戏,但是并不是一个对等的组合游戏,所以试图使用 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,都是比较关键的巧克力。

弄一个表吧,再找不到规律„„

X 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
1 0 -1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15
2 1 0 0 -1 -1 -2 -2 -3 -3 -4 -4 -5 -5 -6 -6 -7
3 2 0 0 -1 -1 -2 -2 -3 -3 -4 -4 -5 -5 -6 -6 -7
4 3 1 1 0 0 0 0 -1 -1 -1 -1 -2 -2 -2 -2 -3
5 4 1 1 0 0 0 0 -1 -1 -1 -1 -2 -2 -2 -2 -3
6 5 2 2 0 0 0 0 -1 -1 -1 -1 -2 -2 -2 -2 -3
7 6 2 2 0 0 0 0 -1 -1 -1 -1 -2 -2 -2 -2 -3
8 7 3 3 1 1 1 1 0 0 0 0 0 0 0 0 -1
9 8 3 3 1 1 1 1 0 0 0 0 0 0 0 0 -1
10 9 4 4 1 1 1 1 0 0 0 0 0 0 0 0 -1
11 10 4 4 1 1 1 1 0 0 0 0 0 0 0 0 -1
12 11 5 5 2 2 2 2 0 0 0 0 0 0 0 0 -1
13 12 5 5 2 2 2 2 0 0 0 0 0 0 0 0 -1
14 13 6 6 2 2 2 2 0 0 0 0 0 0 0 0 -1
15 14 6 6 2 2 2 2 0 0 0 0 0 0 0 0 -1
16 15 7 7 3 3 3 3 1 1 1 1 1 1 1 1 0

 1 #include <cstdio>
 2 typedef long long LL;
 3 int main()
 4 {
 5     //freopen("in.txt", "r", stdin);
 6
 7     int T; scanf("%d", &T);
 8     for(int kase = 1; kase <= T; kase++)
 9     {
10         int n; scanf("%d", &n);
11         LL a = 0, b = 0;
12         while(n--)
13         {
14             int x, y;
15             scanf("%d%d", &x, &y);
16             while(x > 1 && y > 1) { x >>= 1; y >>= 1; }
17             if(y == 1) a += (LL)x - 1;
18             if(x == 1) b += (LL)y - 1;
19         }
20         printf("Case %d: %s\n", kase, a > b ? "Alice" : "Bob");
21     }
22
23     return 0;
24 }

代码君

HDU 3544 (不平等博弈) Alice's Game

时间: 2024-10-02 06:15:33

HDU 3544 (不平等博弈) Alice's Game的相关文章

hdu 5165 Funny Game (博弈)

hdu 5165 Funny Game (博弈) 题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5165 题意: Bob有一个数组{a1,a2,...,an},数组中的每个元素都是介于1到n之间的整数.Bob还有m个函数,他们的定义域和值域都是集合{1,2,...,n}.Bob和Alice轮流开始玩游戏,Alice先开始.对于每一轮,玩家可以选择一个函数f使得数组中每个元素 ai(1 <= i <= n)变成f(ai).例如,一开始数组是{1,

hdu 2188 巴什博弈

巴什博奕(Bash Game):只有一堆n个物品,两个人轮流从这堆物品中取物,规 定每次至少取一个,最多取m个.最后取光者得胜. 显然,如果n=m+1,那么由于一次最多只能取m个,所以,无论先取者拿走多少个, 后取者都能够一次拿走剩余的物品,后者取胜.因此我们发现了如何取胜的法则:如果 n=(m+1)r+s,(r为任意自然数,s≤m),那么先取者要拿走s个物品,如果后取者拿走 k(≤m)个,那么先取者再拿走m+1-k个,结果剩下(m+1)(r-1)个,以后保持这样的 取法,那么先取者肯定获胜.总

HDU 4791 &amp;amp; ZOJ 3726 Alice&amp;#39;s Print Service (数学 打表)

题目链接: HDU:http://acm.hdu.edu.cn/showproblem.php?pid=4791 ZJU:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=5072 Problem Description Alice is providing print service, while the pricing doesn't seem to be reasonable, so people using her pr

HDU 2147-kiki&#39;s game(博弈/找规律)

kiki's game Time Limit: 5000/1000 MS (Java/Others)    Memory Limit: 40000/10000 K (Java/Others) Total Submission(s): 9174    Accepted Submission(s): 5485 Problem Description Recently kiki has nothing to do. While she is bored, an idea appears in his

HDU 3389 Game (阶梯博弈)

Game Time Limit: 1000MS   Memory Limit: 32768KB   64bit IO Format: %I64d & %I64u Submit Status Description Bob and Alice are playing a new game. There are n boxes which have been numbered from 1 to n. Each box is either empty or contains several card

hdu 2897(巴什博弈变形)

邂逅明下 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 4069    Accepted Submission(s): 1872 Problem Description 当日遇到月,于是有了明.当我遇到了你,便成了侣.那天,日月相会,我见到了你.而且,大地失去了光辉,你我是否成侣?这注定是个凄美的故事.(以上是废话)小 t和所有世俗的人

HDU 2177——威佐夫博弈

题目: Description 有两堆石子,数量任意,可以不同.游戏开始由两个人轮流取石子.游戏规定,每次有两种不同的取法,一是可以在任意的一堆中取走任意多的石子:二是可以在两堆中同时取走相同数量的石子.最后把石子全部取完者为胜者.现在给出初始的两堆石子的数目,如果轮到你先取,假设双方都采取最好的策略,问最后你是胜者还是败者.如果你胜,你第1次怎样取子? Input 输入包含若干行,表示若干种石子的初始情况,其中每一行包含两个非负整数a和b,表示两堆石子的数目,a和b都不大于1,000,000,

HDU 2149————巴什博弈

Description 虽然不想,但是现实总归是现实,Lele始终没有逃过退学的命运,因为他没有拿到奖学金.现在等待他的,就是像FarmJohn一样的农田生涯. 要种田得有田才行,Lele听说街上正在举行一场别开生面的拍卖会,拍卖的物品正好就是一块20亩的田地.于是,Lele带上他的全部积蓄,冲往拍卖会. 后来发现,整个拍卖会只有Lele和他的死对头Yueyue. 通过打听,Lele知道这场拍卖的规则是这样的:刚开始底价为0,两个人轮流开始加价,不过每次加价的幅度要在1-N之间,当价格大于或等于

hdu 1907 尼姆博弈

John Time Limit: 5000/1000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others)Total Submission(s): 3745    Accepted Submission(s): 2116 Problem Description Little John is playing very funny game with his younger brother. There is one big bo