您的位置:首页 > 其它

HDU 2177 取(2堆)石子游戏

2015-10-25 11:18 369 查看
题目链接:HDU 2177 取(2堆)石子游戏

题解:威左夫博弈,先行者胜时单边取枚举,判断是否留给对手必败态

PS:最近没怎么刷过题了,代码未优化,略长o(^▽^)o

#include<iostream>
#include<cmath>
using namespace std;

double a, b;

void f(int data)
{
if(a > data)
cout << data  << " " <<  b-a+data << endl;

for(int i = 1; i < a;i++){
int k1 = b-a+i;
int data1 = floor(k1*(1.0+sqrt(5.0))/2.0);
if(data1 == a-i)
cout << a-i << " " << b << endl;
}
for(int i = 1; i < b - a;i++){
int k1 = b -i -a;
int data1 = floor(k1*(1.0+sqrt(5.0))/2.0);
if(data1 == a)
cout << a << " " << b-i << endl;
}
for(int i = b - a -1; i < b; i++){
int k1 = a - b + i;
int data1 = floor(k1*(1.0+sqrt(5.0))/2.0);
if(data1 == b-i)
cout << b-i << " " << a << endl;
}
}

int main()
{
while(cin >> a >> b,a+b){
int k = b - a;
int data = floor(k*(1.0+sqrt(5.0))/2.0);
if (data == a) cout << 0 << endl;
else {
cout << 1 << endl;
if(a == b){
cout << 0 << " " << 0 << endl;
cout << a-1 << " " << b << endl;
}
else  f(data);
}
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  hdu