消防器材网站建设背景,做网站的学什么,广告投放都有哪些平台,网站建设哪些字体没有版权题干#xff1a;
有两堆石子#xff0c;数量任意#xff0c;可以不同。游戏开始由两个人轮流取石子。游戏规定#xff0c;每次有两种不同的取法#xff0c;一是可以在任意的一堆中取走任意多的石子#xff1b;二是可以在两堆中同时取走相同数量的石子。最后把石子全部取…题干
有两堆石子数量任意可以不同。游戏开始由两个人轮流取石子。游戏规定每次有两种不同的取法一是可以在任意的一堆中取走任意多的石子二是可以在两堆中同时取走相同数量的石子。最后把石子全部取完者为胜者。现在给出初始的两堆石子的数目如果轮到你先取假设双方都采取最好的策略问最后你是胜者还是败者。
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
解题报告 威佐夫博弈。注意向下取整。二分寻找k。找到后再判断是否还会有比k大的数也满足向下取整以后是a。反正这个for循环也不会执行很多次于是乎果断暴力了一下因为我才可能会有多个k满足这个要求毕竟qq的值是1.618左右也不算很大然后看看可不可以找到b满足即可。 主要就是用到了威佐夫博弈的公式。
AC代码
#includebits/stdc.h
#define ll long long
using namespace std;
int a,b;
double qq;
bool ok(int mid) {if(floor(mid*qq) a) return 1;return 0;
}
int main()
{ qq (1sqrt(5))/2;int l,r,mid;while(~scanf(%d%d,a,b)) {int flag 0;if(a b) swap(a,b);l1,rb;mid (lr) /2;while(lr) {mid (lr)/2;if(ok(mid)) rmid;else lmid1;}int tmp floor(l*qq);if(tmp a) {for(int i l; il100; i) {if(floor(i*qq) a) break;if(bai) flag1;}}if(flag) puts(0);else puts(1);}return 0 ;
}
//ak [k1√5/2]bk ak k k012...n 方括号表示取整函数)
AC代码2直接用库函数去xjbg题解
/*
任给一个局势ab怎样判断它是不是奇异局势呢我们有如下公式ak [k1√5/2]bk ak k k012…,n 方括号表示取整函数)奇妙的是其中出现了黄金分割数1√5/2 1。618…,因此,由akbk组成的矩形近
似为黄金矩形由于2/1√5√5-1/2可以先求出j[a√5-1/2]若a[
j1√5/2]那么a ajbj aj j若不等于那么a aj1bj1 aj1j 1若都不是那么就不是奇异局势。然后再按照上述法则进行一定会遇到奇异
局势。
*/#includestdio.h
#includemath.h
#includealgorithm
using namespace std;
int main()
{int n,m;while(scanf(%d%d,n,m)!EOF){if(nm)swap(n,m);
// printf(n%d,m%d\n,n,m);int k(int)(n*(sqrt(5)-1)/2.0);if((int)(k*(sqrt(5)1)/2.0)nmnk)printf(0\n);//奇异局势else if((int)((k1)*((sqrt(5)1)/2.0))nmnk1)printf(0\n);//奇异局势elseprintf(1\n);//非奇异局势}return 0;
}AC代码3同上
#includeiostream
#includecstdio
#includealgorithm
#includecmath
using namespace std;int main()
{int n,m,k,t;while(scanf(%d%d,n,m )2){if(nm)//交换nm的值。使nm ;{n^m;m^n;n^m; }kn-m;tk*(1sqrt( 5 ))/2;if(tm)printf(0\n); else printf(1\n); }return 0;
}