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
Solution
结论题。。。打表找规律即可。。。
考虑题目性质,后手总是存在一种策略每次消耗先手的一枚水晶直到先手只剩一枚
水晶然后开始使用水晶等于上述答案。否则一旦后手选择使用水晶,则相当于先后手互换,先手一定存在相似的策略,容
易推出最后的答案一定不会更优。所以:对于 A, B 均为正整数的时候答案就是 A − B − 2,
否则当 B=0 就是 A ,当
A=0 时就是 −B 。
Code
#include<cstdio>
using namespace std;
inline int read()
{
int X=0,w=1; char ch=0;
while(ch<'0' || ch>'9') {if(ch=='-') w=-1;ch=getchar();}
while(ch>='0' && ch<='9') X=(X<<3)+(X<<1)+ch-'0',ch=getchar();
return X*w;
}
inline void write(int x)
{
if(x<0) x=-x,putchar('-');
if(x>9) write(x/10);
putchar(x%10+'0');
}
int main()
{
int T=read();
while(T--)
{
int n=read(),m=read();
if(!n) write(-m); else
if(!m) write(n); else write(n-m-2);
putchar('\n');
}
return 0;
}