如果硬要说这算是博弈题目的话,那这个博弈是不公平博弈(partizan games),因为双方面对同一个局面做出来的决策是不一样的。

我们平时做的博弈都是公平博弈(impartial games),所以在这道题里面,那些必胜必败状态,SG函数SG定理都派不上用场了。

但是,这道题是可以贪心的。

比如第一个图案对于Alice来说是安全稳定的,因为Bob不会跟他去抢位置,所以Alice可以省到最后去放。同样地,Bob可以将第2个图案省到最后再去放。

比如说第15个图案,如果能抢先占到的话会很划算的,因为如果一方占到,不光对方放不了了,自己还会多一个稳定位。

更详细的分析见这:http://www.cnblogs.com/staginner/archive/2011/09/10/2173317.html

我发现大家的思路都是按照这个来的。

 #include <cstdio>

 int a[];

 int main()
{
//freopen("in.txt", "r", stdin); int T; scanf("%d", &T);
for(int kase = ; kase <= T; ++kase)
{
for(int i = ; i <= ; i++) scanf("%d", &a[i]);
int now = , A = a[] * , B = a[] * ;
if(a[] % != ) { A++; now = ; }
int ta = a[] + a[], tb = a[] + a[];
if(ta > tb)//Alice抢5,6, Bob抢3,4
{
ta -= tb;
if(ta % != )
{
if(now == ) A += ta/ + ;
else A += ta / ;
now = - now;
}
else A += ta / ;
}
else if(ta < tb)
{
tb -= ta;
if(tb % != )
{
if(now == ) B += tb / ;
else B += tb/ + ;
now = - now;
}
else B += tb / ;
}
//两人瓜分11,12,13,14
int t = a[] + a[] + a[] + a[];
if(t % != ) now = - now;
//Alice抢7,8, Bob抢9,10
ta = a[] + a[]; tb = a[] + a[];
if(ta < tb)
{
tb -= ta;
if(tb % != )
{
if(now == ) B += tb/ + ;
else B += tb / ;
now = - now;
}
else B += tb / ;
}
else if(ta > tb)
{
ta -= tb;
if(ta % != )
{
if(now == ) A += ta / ;
else A += ta/ + ;
now = - now;
}
else A += ta / ;
} bool win;
if(now == ) win = B >= A ? false : true;
else win = A >= B ? true : false;
printf("Case #%d: %s\n", kase, win ? "Alice" : "Bob");
} return ;
}

代码君

HDU 4023 (博弈 贪心 模拟) Game的更多相关文章

  1. 贪心+模拟 Codeforces Round #288 (Div. 2) C. Anya and Ghosts

    题目传送门 /* 贪心 + 模拟:首先,如果蜡烛的燃烧时间小于最少需要点燃的蜡烛数一定是-1(蜡烛是1秒点一支), num[g[i]]记录每个鬼访问时已点燃的蜡烛数,若不够,tmp为还需要的蜡烛数, ...

  2. 贪心+模拟 ZOJ 3829 Known Notation

    题目传送门 /* 题意:一串字符串,问要最少操作数使得成为合法的后缀表达式 贪心+模拟:数字个数 >= *个数+1 所以若数字少了先补上在前面,然后把不合法的*和最后的数字交换,记录次数 岛娘的 ...

  3. Hdu 4864(Task 贪心)(Java实现)

    Hdu 4864(Task 贪心) 原题链接 题意:给定n台机器和m个任务,任务和机器都有工作时间值和工作等级值,一个机器只能执行一个任务,且执行任务的条件位机器的两个值都大于等于任务的值,每完成一个 ...

  4. CodeForces ---596B--Wilbur and Array(贪心模拟)

    Wilbur and Array Time Limit: 2000MS   Memory Limit: 262144KB   64bit IO Format: %I64d & %I64u Su ...

  5. S-Nim HDU 1536 博弈 sg函数

    S-Nim HDU 1536 博弈 sg函数 题意 首先输入K,表示一个集合的大小,之后输入集合,表示对于这对石子只能去这个集合中的元素的个数,之后输入 一个m表示接下来对于这个集合要进行m次询问,之 ...

  6. D - 淡黄的长裙 HDU - 4221(贪心)

    D - 淡黄的长裙 HDU - 4221(贪心) James is almost mad! Currently, he was assigned a lot of works to do, so ma ...

  7. hdu 4023 2011上海赛区网络赛C 贪心+模拟

    以为是贪心,结果不是,2333 贪心最后对自己绝对有利的情况 点我 #include<cstdio> #include<iostream> #include<algori ...

  8. Educational Codeforces Round 63 (Rated for Div. 2) B. Game with Telephone Numbers 博弈思维+模拟+贪心思维

    题意:博弈题面  给出一个数字序列 (>=11)  有两个人任意删除数字 直到 数字只剩下11位 如果删除后的数字串开头是8那么就是第一个赢 否则就是第二个人赢 第一个人先手  数字序列一定是奇 ...

  9. HDU 1528 贪心模拟/二分图

    Card Game Cheater Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others ...

随机推荐

  1. 驱动笔记 - file_operations

    #include <linux/fs.h> struct file_operations { struct module *owner; loff_t (*llseek) (struct ...

  2. Assetbundle的杂七杂八

    使用Assetbundle时可能遇到的坑 一 24 十一郎未分类 No Comments 转自 http://www.unitymanual.com/blog-3571-132.html 1.Edit ...

  3. mysql修改数据库表权限

    ps:通常我用的是:1.“grant all on *.* to root@'%' identified by 'yourpassword';”——这个还可以顺带设置密码.2.“flush privi ...

  4. Light OJ 1364 Expected Cards (期望dp,好题)

    题目自己看吧,不想赘述. 参考链接:http://www.cnblogs.com/jianglangcaijin/archive/2013/01/02/2842389.html #include &l ...

  5. Hortworks Hadoop生态圈简介

    Hortworks 作为Apache Hadoop2.0社区的开拓者,构建了一套自己的Hadoop生态圈,包括存储数据的HDFS,资源管理框架YARN,计算模型MAPREDUCE.TEZ等,服务于数据 ...

  6. C语言学习资料(转载)

    ◆经典C源程序100例:http://post.baidu.com/f?kz=8618367 ◆时钟的驻留程序:http://post.baidu.com/f?kz=10822377 ◆数据结构暨若干 ...

  7. lintcode:Pow(x, n)

    Pow(x, n) Implement pow(x, n). 解题 直接顺序求解,时间复杂度O(N) public class Solution { /** * @param x the base n ...

  8. Random.Next 方法 (Int32, Int32)

    minValue 返回的随机数的下界(随机数可取该下界值). maxValue 返回的随机数的上界(随机数不能取该上界值).maxValue 必须大于等于 minValue. 返回值 一个大于等于 m ...

  9. C#格式化输出

    double a = 12354.365; Console.WriteLine(string.Format("{0:f4}", a)); 输出a的四位小数

  10. ruby 学习 -- Array --2

    定义: [1, 2, 3] # An array that holds three Fixnum objects [-10...0, 0..10,] # An array of two ranges; ...