(博弈论高精度小数)51nod1185威佐夫游戏v2(代码片段)

ekalos-blog ekalos-blog     2023-01-12     790

关键词:

有2堆石子。A B两个人轮流拿,A先拿。每次可以从一堆中取任意个或从2堆中取相同数量的石子,但不可不取。拿到最后1颗石子的人获胜。假设A B都非常聪明,拿石子的过程中不会出现失误。给出2堆石子的数量,问最后谁能赢得比赛。
例如:2堆石子分别为3颗和5颗。那么不论A怎样拿,B都有对应的方法拿到最后1颗。
 
Input
第1行:一个数T,表示后面用作输入测试的数的数量。(1 <= T <= 10000)
第2 - T + 1行:每行2个数分别是2堆石子的数量,中间用空格分隔。(1 <= N <= 10^18)
Output
共T行,如果A获胜输出A,如果B获胜输出B。
Input示例
3
3 5
3 4
1 9
Output示例
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必败局面,那么我们称它为奇异局面结论是,任意一个局面 查看详情