• #威佐夫博弈#洛谷 2252 [SHOI2002]取石子游戏


    题目

    有两堆石子,数量任意,可以不同。游戏开始由两个人轮流取石子。

    游戏规定,每次有两种不同的取法,一是可以在任意的一堆中取走任意多的石子;

    二是可以在两堆中同时取走相同数量的石子。最后把石子全部取完者为胜者。

    现在给出初始的两堆石子的数目,你先取,假设双方都采取最好的策略,问最后你是胜者还是败者。


    分析

    若两堆石子个数分别为(n,m(ngeq m))

    那么先手必败当且仅当

    [lfloorfrac{sqrt{5}+1}{2}(n-m) floor=m ]

    表示不会证明,记这个结论就行了


    代码

    #include <cstdio>
    #include <cmath>
    #define rr register
    using namespace std;
    const double o=(sqrt(5)+1)/2;
    int a,b;
    signed main(){
    	scanf("%d%d",&a,&b);
    	if (a<b) a^=b,b^=a,a^=b;
    	if ((int)((a-b)*o)==b) putchar(48);
    	    else putchar(49);
    	return 0;
    }
    
  • 相关阅读:
    第07组 Alpha冲刺(2/4)
    第07组 Alpha冲刺(1/4)
    团队项目-需求分析报告
    团队项目-选题报告
    1381 硬币游戏
    1381 硬币游戏
    1347 旋转字符串
    1344 走格子
    1305 Pairwise Sum and Divide
    1384 全排列
  • 原文地址:https://www.cnblogs.com/Spare-No-Effort/p/13859253.html
Copyright © 2020-2023  润新知