hdu2149Public Sale

Posted Child-Single

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了hdu2149Public Sale相关的知识,希望对你有一定的参考价值。

其实这道题本质上也是取石子问题,那么我们还是可以用博弈论来解决。

首先还是特判,若(n>=m)直接输出从n到m的所有整数即可。

然后作进一步分析,可以看到如果目前的竞价是m-(n+1),也就是说离m还有n+1的距离,那么此时轮到竞拍的人必输,所以要尽量给对手这样的点。

同样的,当i*(n+1)<m<(i+1)*(n+1)时,轮到竞价的人必定能赢得竞拍,此时第一次出价也仅有一种出价方法,即出价(m-i*(n+1));而当存在i*(n+1)== m时,必败,输出none。

其实代码和取石子问题差不多:

技术分享
#include<cstdio>
int main()
{
    int n,m;
    while(~scanf("%d %d",&m,&n))
    {
        if(n>=m)
        {
            for(int i=m;i<n;i++)
            printf("%d ",i);
            printf("%d\n",n);
            continue;
        }
        for(int i=1;;i++)
        {
            if(i*(n+1)<m&&m<(i+1)*(n+1)){printf("%d\n",m-i*(n+1));break;}
            else if(i*(n+1)==m){printf("none\n");break;}
        }
    }
    return 0;
}
View Code

 

以上是关于hdu2149Public Sale的主要内容,如果未能解决你的问题,请参考以下文章

HDU 2149 Public Sale 博弈

hdu 2149 Public Sale(bash)

hdu2149Public Sale(巴什博弈)

题解报告:hdu 2149 Public Sale(巴什博弈)

hdu 2149 Public Sale 简单博弈

hdu2149Public Sale