https://vjudge.net/contest/402733#problem/R
有两堆石子,数量任意,可以不同。游戏开始由两个人轮流取石子。游戏规定,每次有两种不同的取法,一是可以在任意的一堆中取走任意多的石子;二是可以在两堆中同时取走相同数量的石子。最后把石子全部取完者为胜者。现在给出初始的两堆石子的数目,如果轮到你先取,假设双方都采取最好的策略,问最后你是胜者还是败者。
Input
输入包含若干行,表示若干种石子的初始情况,其中每一行包含两个非负整数a和b,表示两堆石子的数目,a和b都不大于1,000,000,000。
Output
输出对应也有若干行,每行包含一个数字1或0,如果最后你是胜者,则为1,反之,则为0。
Sample Input
2 1 8 4 4 7
Sample Output
0 1 0
Sponsor
#include <iostream>
#include <cstdio>
#include <fstream>
#include <algorithm>
#include <cmath>
#include <deque>
#include <vector>
#include <queue>
#include <string>
#include <cstring>
#include <map>
#include <stack>
#include <set>
using namespace std;
typedef long long ll;
const ll maxn=1e6+10;
ll a[maxn],m,n;
int main()
{
while(~scanf("%lld %lld",&n,&m))
{
if(n>m)
swap(n,m);
double x=(sqrt(5.0)+1)/2,c=(m-n)*1.0;
ll u=x*c;
if(u==n)
cout<<0<<endl;
else
cout<<1<<endl;
}
return 0;
}

这是一个关于取石子游戏的问题,玩家需要在两堆石子中轮流取走石子,可以按任意数量从一堆中取,或者从两堆中取相同数量。目标是当石子取完时成为胜者。如果初始时给定两堆石子的数量,并且双方都采取最佳策略,根据输入的石子数量预测最后的胜者,输出1表示胜,0表示败。
1850

被折叠的 条评论
为什么被折叠?



