链接:https://ac.nowcoder.com/acm/contest/333/B
来源:牛客网
 

题目描述

AH是auction house,拍卖行的缩写。众所周知,为了道具流通,基本上每个网络游戏都会有拍卖行或者类似拍卖行的系统存在。

Wpremig最近喜欢上玩《XX传奇》,游戏为了吸引玩家,推出了一种"抢拍模式",在原有的拍卖行竞价基础上,增加了一条规则:只有最早竞价的两个人有资格竞价。

原本规则如下:

所有物品初始价格为0, 每次加价必须在[1,N]内,并且不存在一口价功能,只有一个价格上限M,当某次某个玩家加价后的价格大于等于M时,这个玩家就可以拍下物品,或者在48小时后还没有超出上限,那么当前出价人拍下物品。

Wpremig通过内部消息知道明天会拍卖一件神器,并且找到了一个脚本软件,能保证自己一定是第一个竞价的人,但是现在他的几个不同的消息来源,给出的物品价格是不一样的,所以他并不知道到时候神器的准确价格是多少,但是可以知道一点,另一个玩家一定不会在中途放弃。

所以Wpremig想要知道对于每种N,M的情况,自己一开始出价多少才能够保证自己拍到这件物品?

输入描述:

多组数据,不超过100组。
每组数据包含两个整数N,M表示加价区间[1,N]和价格上限M,(1<=N,M<=1024)

输出描述:

对于每组数据输出Wpremig所有可行的第一次加价方案,从小到大用空格隔开。若不存在可行的方案,则输出"You are loser"

示例1

输入

复制

4 3

输出

复制

3 4

巴什博弈:,分三种情况讨论。

m<=n 时,此时先手一开始就能赢。

m>n 且 m%(n+1) == 0 时,此时先手必败。

m>n 且 m%(n+1) != 0 时,此时先手只要取 m % (n + 1)。

代码如下:

#include<bits/stdc++.h>
using namespace std;
int main()
{
    int n,m;
    while(cin>>n>>m)
    {
     if(n>=m)
        {
            for(int i=m;i<=n;i++)
                i!=n?cout<<i<<" ":cout<<i<<endl;
        }
        else
        {
            if(m%(n+1))
                cout<<m%(n+1)<<endl;
            else
            cout<<"You are loser\n";
        }
    }
    return 0;
}