其他分享
首页 > 其他分享> > 5407. Deep

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,叹了口气,感觉还是暴力。所以开始着手第一题。
分析了一下,你会发现某种情况下,先手的总是会被翻盘。那是什么情况呢?

可以知道,后手总是存在一种可以让先手输的方法。先“诱惑”先手弄出一颗水晶,那么后手就会等到先手把水晶用完。这时后手在用。
只要后手坚持这样的方法,那么他就会赢。

所以我们要考虑的情况只有两种了:

  1. 先手或者后手中有一个是0,那么直接输出他们的差
  2. 要不然,只能输出他们的差-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