zoukankan      html  css  js  c++  java
  • Benelux Algorithm Programming Contest 2016 Preliminary A. Block Game

    题意:

    给出n和m两个数,每次可以把较大的那个减少较小的数的整数倍(减完>=0)

    两个人轮流进行,最先将一个数减为0的人获胜

    问先手必胜还是必败

    令n<m

    若m是n的倍数,那么先手必胜

    若m>2*n,那么

    若(n,m%n)是必胜态,那么先手将m减至剩下m%n必胜

    若(n,m%n)是必败态,那么先手将m减至m%n+n必胜

    所以先手必胜

    若n<m<2*n,那此时只能进行一次m减n,重复这样的操作,直至到m>=2*n的状态

    判断进行了多少次m减n的操作

    偶数次先手必胜,奇数次先手必败

    #include<cstdio>
    #include<iostream>
    #include<algorithm>
    
    using namespace std;
    
    int main()
    {
        long long n,m;
        cin>>n>>m;
        if(n>m) swap(n,m);
        if(!(m%n)) printf("win");
        else if(m<2*n)
        {
            int t=0; 
            while(m<2*n)
            {
                ++t;
                m-=n;
                if(m<n) swap(n,m);
            }
            if(t&1) printf("lose");
            else printf("win");
        }
        else printf("win");
    }
    作者:xxy
    本文版权归作者和博客园共有,转载请用链接,请勿原文转载,Thanks♪(・ω・)ノ。
  • 相关阅读:
    Java自学第十天
    Java自学第九天
    Java自学第八天
    Java自学第七天
    Java自学第六天
    Java自学第五天
    Java自学第四天
    Java自学第三天
    Oracle11g RAC单节点重启
    PostgreSQL 日志处理
  • 原文地址:https://www.cnblogs.com/TheRoadToTheGold/p/13628680.html
Copyright © 2011-2022 走看看