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,走,所以自然可以 ...
随机推荐
- 虚拟机安装tools for Ubuntu
1.启动虚拟机,进入虚拟机 2.选定菜单中的虚拟机按钮,点击安装VMware Tools 3.此时虚拟机上会弹出一些文件, 复制VMwareTools-XXX-XX.tar.gz到桌面,鼠标右键可 ...
- 使用response实现文件下载注意点
创建web工程,使用response实现文件的下载. 在webRoot下创建download文件,里面包含要下载的文件,现在把源码贴上来,然后再说我遇到的问题 public class DownLoa ...
- linux安装安卓开发工具android studio
http://www.android-studio.org/ http://android-studio.org/index.php/docs/guide 最近要接触android编程,本来想装ecl ...
- Employment Planning DP
Employment Planning Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Othe ...
- c#动态生成word,在本地可以执行,但发布到iis上出错解决方案
报错点: Microsoft.Office.Interop.Word.DocumentClass.SaveAs 解决方案: 1.在"开始"->"运行"中输 ...
- IMapControl3 Interface(1) Properties属性
IMapControl3 Interface Provides access to members that control the MapControl. Note: the IMapControl ...
- PAT (Advanced Level) 1079. Total Sales of Supply Chain (25)
树的遍历. #include<cstdio> #include<cstring> #include<cmath> #include<vector> #i ...
- JQuery中的mouseover和mouseenter的区别
mouseover和mouseout是一对:mouseenter和mouseleave是一对. 相同点:都是鼠标经过就触发事件 不同点: 给外盒子一个经过触发事件,但是mouseover会在鼠标经过外 ...
- jvm内存设置及总结
http://dmouse.iteye.com/blog/1264118 jvm内存设置及总结 博客分类: java相关 Application情况: 大量使用了内存缓存,应用负载量较大,900w/d ...
- HDU 1068 Girls and Boys 二分图最大独立集(最大二分匹配)
Girls and Boys Time Limit: 20000/10000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) ...