5407. Deep
作者:互联网
感觉这题的难度是无法估计的,运气有时候也很重要……
Deep
Description
失败的燃烧军团想要逃回深渊,Khadgar 想要追击它们。
然而进入深渊的传送门只有一座,燃烧军团和Khadgar 各有一些法力水晶,由Khadgar 先手,双方每次可以作出如下选择:
• 使用一个法力水晶,使得传送门的法力等级增加一。
• 不用法力水晶,让对方增加等于传送门法力等级的深度,然后将传送门的法力值清零。特别地,若法力水晶数不为零且传送门法力等级为零则不能进行这样的操作。
双方都会采取最优策略使自己的最终深度与对手深度的差最大(初始时深度均为零)。
现在多次给定双方起始的法力水晶数量A, B,求Khadgar 与燃烧军团的的最终深度差。
Input
T
A1 B1
A2 B2
…
AT BT
Output
输出T 行T 个整数,表示Khadgar 与燃烧军团的的深度差。
Sample Input
2
0 1
4 1
Sample Output
-1
1
Data Constraint
对于30% 的数据,有T= 1; 0 <= A, B <= 10
对于另外20% 的数据,有T <= 10^5; 0 <= A, B <= 10^2
对于100% 的数据,有T <= 10^5; 0 <= A, B <= 10^5
首先,看到这道题,你的第一反应是什么?
我的是贪心。
所以开始往贪心方面想,结果发现我对题目的理解还不够深。所以先是放下这道题,开始弄第三题的暴力去了。当我再看到这道题,时间已经过去2小时了,这时我样例A了T2&T3。
所以看到T4,叹了口气,感觉还是暴力。所以开始着手第一题。
分析了一下,你会发现某种情况下,先手的总是会被翻盘。那是什么情况呢?
可以知道,后手总是存在一种可以让先手输的方法。先“诱惑”先手弄出一颗水晶,那么后手就会等到先手把水晶用完。这时后手在用。
只要后手坚持这样的方法,那么他就会赢。
所以我们要考虑的情况只有两种了:
- 先手或者后手中有一个是0,那么直接输出他们的差
- 要不然,只能输出他们的差-2(我比赛的时候没去证明,只是看着样例弄出来的
所以最终的CPP:
#include<cstdio>
#define fre(x) freopen(#x".in","r",stdin),freopen(#x".out","w",stdout)
#define cin(x) scanf("%d",&x)
using namespace std;
int t,x,y;
int main()
{
fre(deep);cin(t);
for(int i=1;i<=t;++i)
{
cin(x),cin(y);
if(x==0||y==0) printf("%d\n",x-y);
else printf("%d\n",x-y-2);
}return 0;
}
标签:5407,法力,传送门,Khadgar,cin,Deep,水晶,深度 来源: https://blog.csdn.net/weixin_46873380/article/details/111743560