• B


    题目链接:

    B - Euclid's Game

     HDU - 1525

    题目大意:给你两个数n和m,然后每次较大的数可以减去较小的数的k倍(k>=1),然后问你谁会先到达两个数中有0的情况出现。

    具体思路:给你两个数n和m,首先判断整除,如果能整除则说明先手必赢。假设n>m,n可以表示成 n = k * m +b, 当k=1或者0的时候,我们只能顺着进行,不能有另外的骚操作,也就是说当k<=1 的时候,这个时候已经能够判断是必胜态还是比必败态了。但是当k>=2的时候,我们可以控制到达k==1还是k==0的状态,所以这个时候我们是必胜态。对于0<=k<=1的状态,我们一步步判断就好了。

    AC代码:

     1 #include<bits/stdc++.h>
     2 using namespace std;
     3 # define ll long long
     4 const int maxn = 2e5  + 100;
     5 const int N  = 100;
     6 bool check(int n,int m){
     7 int ans=0;
     8 while(1){
     9 if(n<m)swap(n,m);
    10 if( n % m==0 || n >= 2 * m )return ans;
    11 n-=m;
    12 ans^=1;
    13 }
    14 return ans;
    15 }
    16 int main(){
    17 int n,m;
    18 while(~scanf("%d %d",&n,&m)&&(n+m)){
    19 if(!check(n,m))printf("Stan wins
    ");
    20 else printf("Ollie wins
    ");
    21 }
    22 return 0;
    23 }
  • 相关阅读:
    Code first常用命令
    vue问题集锦
    net WebConfig读写
    CefSharp使用心得
    工作问题
    工作总结
    HttpContext.Current.Session为null
    Java基础00-接口组成更新31
    Java基础00-Lamda表达式30
    Java基础00-网络编程29
  • 原文地址:https://www.cnblogs.com/letlifestop/p/10839289.html
Copyright © 2020-2023  润新知