HDU 2177 取(2堆)石子游戏
2015-10-25 11:18
369 查看
题目链接:HDU 2177 取(2堆)石子游戏
题解:威左夫博弈,先行者胜时单边取枚举,判断是否留给对手必败态
PS:最近没怎么刷过题了,代码未优化,略长o(^▽^)o
题解:威左夫博弈,先行者胜时单边取枚举,判断是否留给对手必败态
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 1568
- HDU1290
- HDU1568(Fobonacci公式)
- HDU ACM Step 2.2.2 Joseph(约瑟夫环问题)
- HDU 1405
- HDU 1297
- hdu 1205
- hdu 2087
- hdu 1016
- HDU 4898 The Revenge of the Princess’ Knight ( 2014 Multi-University Training Contest 4 )
- HDU 5240 Exam (好水的题)
- HDU5237 Base64 大模拟
- HDU 1000
- HDU 1001
- hdu-5385
- hdu-5405
- hdu-5490
- HDU 1622 Trees On The Level
- HDU 1063 Exponentiation
- Hdu5033