您的位置:首页 > 其它

威佐夫博弈输出第一次如何取-HDU2177

2017-08-16 15:14 190 查看
https://vj.xtuacm.cf/contest/view.action?cid=125#problem/D

暴力枚举

第一个分支,从两堆物品中同时取出相同数量的物品

第二个分支,只从一堆物品中取物品

(从多的那一堆中取,为什么只从多的那一堆中取捏?

Because 从少的那一堆中取 与 从多的那一堆中取中会有一部分重合的地方,

重合的就是从少的那一堆取的情况。)

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
const int maxn=105;
using namespace std;

int main()
{
double s=(1+sqrt(5.0))/2;
int n,m;
while(~scanf("%d%d",&n,&m),n||m)
{
if(n<m)swap(n,m);
int l=n-m;
if((int)(l*s)==m)
printf("0\n");
else
{
printf("1\n");
//            if(m==n)
//                printf("%d %d",m,n);

for(int i=1;i<=m;i++)
{
int y=m-i;
if(y==(int)(s*l))
{
printf("%d %d\n",m-i,n-i);
break;
}

}
int s1,s2;
for(int i=1;i<=n;i++)
{
int x=n-i;
if(x<m)
{
s1=m,s2=x;
}
else
{
s1=x,s2=m;
}
l=s1-s2;
if(s2==(int)(l*s))
{
printf("%d %d\n",s2,s1);
break;
}
}
}
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: