HDU-4371-Alice and Bob
题目链接
http://acm.hdu.edu.cn/showproblem.php?pid=4371
这题在比赛的时候看错了题意,卡了很久都没做出来,也没有再回头仔细去看题,所以没做出来,之后再看别人的博客才知道,题意弄错了。
英语一定要给我多记单词,多去翻译文章句子。
题意:题意:Alice 和 Bob 轮流写数字,假设第 i 次的数字是 S(i) ,那么第 i+1 次的数字 S(i+1)= S(i)+d(k)或 S(i)-d(k),
条件是 S(i+1)<= n && S(i-1)<S(i+1)。不过题意弄懂了,这个题也不好做。只能引用他人的思路了
结论:在所有的d中,选择最小的d,这里记作dmin,Alice和Bob每次都选择+dmin(写下的数是在原来的那个数上加上dmin),按照这样的策略最后的结果就是全局的结果。
可以这样考虑正确性,不妨假设按照以上策略是Alice获胜,那么Alice并不会主动改变策略;假设Bob在某一步突然改变策略,即没有选择+dmin,那么就必然选择了某个+d(不会是-d,因为这样肯定不合法),且d > dmin,那么下一步Alice就可以选择-dmin了,再下一步,Bob就只能选择某个+d,且d > dmin,Alice则可以一如既往的选择-dmin,如此循环,无论每次Bob做什么样的决策,Alice都可以选择-dmin,所以肯定是Bob最先没有选择,同样是Alice获胜。这样就证明了开头的结论。
分析:杂一看真的不好确定必输或必赢状态。那么直接想最后一步,什么时候就结束呢?s(i)+min > n 时就输了;那么s(i-1)又是什么情况呢?s(i-1) 可以选择一个 d(d >min) 或 min 这两种情况,如果选择了 min,那么下一步一定也要向上加,如果选择了是 d 那么有两种情况种是向下面减,和向上面加。于是可以发现先手如果选择了 min 那么后手只能向上加,如果先手选择了 d ,那么后手就可以减去 min ,这样可以保证自己永远有数可以写直到自己赢了。
代码
#include<stdio.h>
int main(void)
{
int t,n,m,i,j;
int s;
int d[111];
int min;
scanf("%d",&t);
for(i=1;i<=t;i++)
{
min=999999999;
scanf("%d%d",&n,&m);
for(j=1;j<=m;j++)
{
scanf("%d",d+i);
if(min>d[i])
min=d[i];
}
s=n/min;//Alice先取
if(s%2==0)//如果s为偶,那么最后是Bob取到n,或少于n,但与n相差不超过min。
{//所以Alice再取的话,就会 > n 成立。
printf("Case #%d: Alice\n",i);
}
else
{
printf("Case #%d: Bob\n",i);
}
}
return 0;
}
HDU-4371-Alice and Bob的更多相关文章
- 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 4268 Alice and Bob
Alice and Bob Time Limit : 10000/5000ms (Java/Other) Memory Limit : 32768/32768K (Java/Other) Tota ...
- hdu 4268 Alice and Bob(multiset|段树)
Alice and Bob Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) T ...
- hdu 3660 Alice and Bob's Trip(树形DP)
Alice and Bob's Trip Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Oth ...
- HDU 4268 Alice and Bob 贪心STL O(nlogn)
B - Alice and Bob Time Limit:5000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u D ...
- 博弈 HDOJ 4371 Alice and Bob
题目传送门 题意:Alice和 Bob轮流写数字,假设第 i 次的数字是S[i] ,那么第 i+1 次的数字 S[i+1] = S[i] + d[k] 或 S[i] - d[k],条件是 S[i+1] ...
- HDU 4268 Alice and Bob(贪心+Multiset的应用)
题意: Alice和Bob有n个长方形,有长度和宽度,一个矩形能够覆盖还有一个矩形的条件的是,本身长度大于等于还有一个矩形,且宽度大于等于还有一个矩形.矩形不可旋转.问你Alice最多能覆盖Bo ...
- HDU 5054 Alice and Bob(数学)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5054 Problem Description Bob and Alice got separated ...
- hdu 4111 Alice and Bob(中档博弈题)
copy VS study 1.每堆部是1的时候,是3的倍数时输否则赢: 2.只有一堆2其他全是1的时候,1的堆数是3的倍数时输否则赢: 3.其他情况下,计算出总和+堆数-1,若为偶数,且1的堆数是偶 ...
- HDU 5708 Alice and Bob (博弈,找规律)
题意: 一个无限大的棋盘,一开始在1,1,有三种移动方式,(x+1,y)(x,y+1) (x+k,y+k)最后走到nm不能走了的人算输.. 析:.我们看成一开始在(n,m),往1,1,走,所以自然可以 ...
随机推荐
- PAT (Advanced Level) 1071. Speech Patterns (25)
简单题. #include<cstdio> #include<cstring> #include<cmath> #include<vector> #in ...
- 面向对象的JS代码
在下面的例子中可以找到强类型语言中所描述的类,属性,方法,对象. <script language="javascript" type="text/javascri ...
- Commons Codec基本使用(转载)
在实际的应用中,我们经常需要对字符串进行编解码,Apache Commons家族中的Commons Codec就提供了一些公共的编解码实现,比如Base64, Hex, MD5,Phonetic an ...
- 打造最强Windows Server 2012 给你比Windows 8更好的体验
每一代微软桌面操作系统推出的时候,都会同步推出相应核心的服务器操作系统,稳定性会更强哈 所以改造一下,让它保留兼容和专业的同时又有桌面操作系统的美观和便捷,多好 咳咳,让我们来看看怎么把Server ...
- AOP 在javascript 中的使用
AOP(Aspect Oriented Programming) 意为面向切面编程 可以在不修改原有代码的情况下增加新功能,利用AOP可以对业务逻辑各个部分进行隔离,从而使得业务逻辑各部分的耦合度降低 ...
- 字符串的妙用之拼出花样的sql
条件写在前面 string sqlrequirement =""; if(dtp_sta.text==""&&dtp_end.text==&qu ...
- 安装SqlServer2008后vs中dev控件消失
点击红的的
- BP神经网络的Java实现
http://fantasticinblur.iteye.com/blog/1465497
- PHP 领域模型与数据库映射文章
1. http://blog.csdn.net/happen_zhang/article/details/12761747 2. http://blog.csdn.net/hguisu/article ...
- JAVA调用c/c++代码
JNI是Java Native Interface的缩写,中文为JAVA本地调用.使用JNI可以很方便的用我们的Java程序调用C/C++程序.很多时候,某些功能用Java无法实现,比如说涉及到底层驱 ...