zoukankan      html  css  js  c++  java
  • HDU 1525 (博弈) Euclid's Game

    感觉这道题用PN大法好像不顶用了,可耻地看了题解。

    考虑一下简单的必胜状态,某一个数是另一个数的倍数的时候是必胜状态。

    从这个角度考虑一下:游戏进行了奇数步还是偶数步决定了哪一方赢。

    如果b > 2a,那么这一方就有权利改变游戏步数的奇偶性,从而到达对自己有利的状态,所以这是一个必胜状态。

    如果a < b < 2a,那么下一步只能到达(b-a, a)状态,一直模拟就行。

     1 #include <cstdio>
     2 #include <algorithm>
     3 using namespace std;
     4 
     5 int main()
     6 {
     7     int a, b;
     8     while(scanf("%d%d", &a, &b) == 2 && a + b)
     9     {
    10         int step = 0;
    11         if(a > b) swap(a, b);
    12         if(a == 0) { puts("Ollie wins"); continue; }
    13         while(!(b % a == 0 || b > a * 2))
    14         {
    15             b -= a;
    16             swap(a, b);
    17             step++;
    18         }
    19         printf("%s
    ", step & 1 ? "Ollie wins" : "Stan wins");
    20     }
    21 
    22     return 0;
    23 }
    代码君
  • 相关阅读:
    1203 forms组件
    1128 聚合查询 orm字段及属性
    1127 模型层orm表操作
    1126 视图层与模板层
    1122 django中orm操作
    1121 Django操作
    1125 视图层
    搭建并行开发环境MPICH2
    Linpack之HPL测试 (HPL Benchmark)
    安装NetCDF及HDF5
  • 原文地址:https://www.cnblogs.com/AOQNRMGYXLMV/p/4423262.html
Copyright © 2011-2022 走看看