JZOJ 5407. 【NOIP2017提高A组集训10.21】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

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;
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值