关键词:
第1行:一个数T,表示后面用作输入测试的数的数量。(1 <= T <= 10000) 第2 - T + 1行:每行2个数分别是2堆石子的数量,中间用空格分隔。(1 <= N <= 10^18)
共T行,如果A获胜输出A,如果B获胜输出B。
3 3 5 3 4 1 9
B A A
解:众所周知,计算机表示的小数是一定程度内精确的,如本题(sqrt(5.0) + 1) / 2,double只精确到第16位(double保证15到16位有效数字,不是15到16位小数),而本题精度要求却在16位之后,所以我们需要找到更高精度的黄金比例,并且改进计算方式因为直接使用double还是会丢失精度。
道理我都懂,但是我们预设的高精度黄金比例是怎么得到呢(不承认查阅资料)?
1 #include<stdio.h> 2 3 #define M (int)1e9 4 5 long long tmp[3] = 618033988,749894848,204586834 ; //更精确的(sqrt(5.0) + 1) / 2的小数部分 6 7 int main() 8 9 int t; 10 while (scanf_s("%d", &t) != EOF) 11 12 while (t--) 13 14 long long a, b, temp, num[2]; 15 scanf_s("%lld%lld", &a, &b); 16 if (a < b) 17 18 temp = a; 19 a = b; 20 b = temp; 21 22 a -= b; 23 num[0] = a / M; 24 num[1] = a % M; 25 temp = tmp[2] * num[1]; 26 temp = num[1] * tmp[1] + num[0] * tmp[2] + temp / M; 27 temp = num[1] * tmp[0] + num[0] * tmp[1] + temp / M; 28 temp = num[0] * tmp[0] + temp / M; 29 a += temp; 30 if (a == b) printf("B "); 31 else printf("A "); 32 33 34 return 0; 35
51nod1185威佐夫游戏v2(威佐夫博弈)
1185 威佐夫游戏 V2 基准时间限制:1 秒空间限制:131072 KB分值: 0 难度:基础题 收藏 关注有2堆石子。AB两个人轮流拿,A先拿。每次可以从一堆中取任意个或从2堆中取相同数量的石子,但不可不... 查看详情
51nod1185威佐夫游戏v2
思路:威佐夫博弈+乘法模拟。实现:1#include<iostream>2#include<cstdio>3usingnamespacestd;4typedeflonglongll;56constlltmp[3]={618033988,749894848,204586834};7constllmod=1e9;89intmain()10{11intt;12lla,b;13ci 查看详情
51nod1185威佐夫游戏v2
题目链接:https://www.51nod.com/onlineJudge/questionCode.html#!problemId=1185有2堆石子。AB两个人轮流拿,A先拿。每次可以从一堆中取任意个或从2堆中取相同数量的石子,但不可不取。拿到最后1颗石子的人获胜。假设AB都非常聪明,拿石子的... 查看详情
51nod1185威佐夫游戏v2
有2堆石子。AB两个人轮流拿,A先拿。每次可以从一堆中取任意个或从2堆中取相同数量的石子,但不可不取。拿到最后1颗石子的人获胜。假设AB都非常聪明,拿石子的过程中不会出现失误。给出2堆石子的数量,问最后谁能赢得比... 查看详情
51nod1072威佐夫游戏(简单博弈)
题目链接:https://www.51nod.com/onlineJudge/questionCode.html#!problemId=1072题意:有2堆石子。AB两个人轮流拿,A先拿。每次可以从一堆中取任意个或从2堆中取相同数量的石子,但不可不取。拿到最后1颗石子的人获胜。假设AB都非常聪明,拿... 查看详情
51nod1185威佐夫博奕
有2堆石子。AB两个人轮流拿,A先拿。每次可以从一堆中取任意个或从2堆中取相同数量的石子,但不可不取。拿到最后1颗石子的人获胜。假设AB都非常聪明,拿石子的过程中不会出现失误。给出2堆石子的数量,问最后谁能赢... 查看详情
51nod1072威佐夫游戏
题目链接:https://www.51nod.com/onlineJudge/questionCode.html#!problemId=1072有2堆石子。AB两个人轮流拿,A先拿。每次可以从一堆中取任意个或从2堆中取相同数量的石子,但不可不取。拿到最后1颗石子的人获胜。假设AB都非常聪明,拿石子的... 查看详情
51nod1072威佐夫游戏
1072 威佐夫游戏 有2堆石子。AB两个人轮流拿,A先拿。每次可以从一堆中取任意个或从2堆中取相同数量的石子,但不可不取。拿到最后1颗石子的人获胜。假设AB都非常聪明,拿石子的过程中不会出现失误。给出2堆石子的... 查看详情
51nod1072威佐夫游戏(代码片段)
有2堆石子。AB两个人轮流拿,A先拿。每次可以从一堆中取任意个或从2堆中取相同数量的石子,但不可不取。拿到最后1颗石子的人获胜。假设AB都非常聪明,拿石子的过程中不会出现失误。给出2堆石子的数量,问最后谁能赢得比... 查看详情
hdu-5973gameoftakingstones(威佐夫博弈高精度)(代码片段)
题目描述:Twopeoplefacetwopilesofstonesandmakeagame.Theytaketurnstotakestones.Asgamerules,therearetwodifferentmethodsoftakingstones:Oneschemeisthatyoucantakeanynumberofstonesinanyonepilewhilethealternative 查看详情
1185威佐夫游戏v2(代码片段)
1185威佐夫游戏V2 有2堆石子。AB两个人轮流拿,A先拿。每次可以从一堆中取任意个或从2堆中取相同数量的石子,但不可不取。拿到最后1颗石子的人获胜。假设AB都非常聪明,拿石子的过程中不会出现失误。给出2堆石子的数量... 查看详情
hdu1527取石子游戏(威佐夫博弈)
TimeLimit:2000/1000MS(Java/Others) MemoryLimit:65536/32768K(Java/Others)TotalSubmission(s):8509 AcceptedSubmission(s):4833ProblemDescription有两堆石子,数量任意,可以不 查看详情
hdu1527取石子游戏威佐夫博弈
题目来源:HDU1527取石子游戏题意:中文思路:威佐夫博弈必败态为(a,b)ai+i=bi ai=i*(1+sqrt(5.0)+1)/2 这题就求出i然后带人i和i+1推断是否成立下面转自网上某总结有公式ak=[k(1+√5)/2],bk=ak+k (k=0。1,... 查看详情
poj1067取石子游戏威佐夫博弈博弈论
http://poj.org/problem?id=1067有两堆石子,数量任意,可以不同。游戏开始由两个人轮流取石子。游戏规定,每次有两种不同的取法,一是可以在任意的一堆中取走任意多的石子;二是可以在两堆中同时取走相同数量的石子。最后把石... 查看详情
hdu1527取石子游戏(威佐夫博弈)(代码片段)
取石子游戏TimeLimit:2000/1000MS(Java/Others) MemoryLimit:65536/32768K(Java/Others)TotalSubmission(s):8514 AcceptedSubmission(s):4837ProblemDescription有两堆石子,数量任 查看详情
hdu1527取石子游戏(威佐夫博弈)(代码片段)
取石子游戏TimeLimit:2000/1000MS(Java/Others) MemoryLimit:65536/32768K(Java/Others)TotalSubmission(s):9725 AcceptedSubmission(s):5605ProblemDescription有两堆石子,数量任 查看详情
85-取石子-威佐夫博弈
http://poj.org/problem?id=1067 取石子游戏TimeLimit: 1000MS MemoryLimit: 10000KTotalSubmissions: 45409 Accepted: 15533Description有两 查看详情
[shoi2002]取石子游戏-威佐夫博弈(代码片段)
...都采取最好的策略,问最后你是胜者还是败者。Solution威佐夫博弈模板题如果一个局面是N必败局面,那么我们称它为奇异局面结论是,任意一个局面 查看详情