zoukankan      html  css  js  c++  java
  • HDU 1517

    题意略。

    思路:

    我们分别来考虑n取到的各个区间,从而发现其中的规律:

    [2,9] 明显 Stan 必胜。

    但是当n = 9 + 1时,Stan无论如何也不能取胜,并且此时,假设 Stan 取值 x ,那在[10 , x * 9]这个范围内一定是Ollie必胜。

    Stan 一定会贪心地令x = 2,这样可以尽可能减损Ollie的必胜范围,而Ollie会使自己的数字选择成9,这样可以尽可能扩大自己的必胜范围。

    所以:[10,18 = 2 * 9] Ollie 必胜

    当n = 18 + 1时,Ollie无论如何也没有办法取胜了,这是他也会采取和 Stan 同样的贪心操作,通过令自己选择的所有数字取2来减损接下来 Stan 的必胜范围。

    而Stan一定会使自己的所有数字选9来扩大自己的必胜范围。

    所以:[19 , 162 = 9 * 2 * 9] Stan 必胜

    由此可以找出解题方法,我把当前数字cur = 1,一次乘9,一次乘2,.......这样循环地乘下去,看什么时候超过n,超过n时看看现在乘了几次,

    奇数次则是 Stan 赢,偶数次则是 Ollie 赢。

    代码附上:

    #include<bits/stdc++.h>
    using namespace std;
    typedef long long LL;
    
    int main(){
        LL n;
        while(scanf("%d",&n) == 1){
            LL mul = 1;
            int i;
            for(i = 0;mul < n;++i){
                mul *= LL((i & 1) ? 2 : 9);
            }
            printf("%s
    ",(i & 1) ? "Stan wins." : "Ollie wins.");
        }
        return 0;
    }
  • 相关阅读:
    flask_第一个程序
    Web框架_MVC vs MVT
    python_使用qrcode生成二维码
    HDU 4641
    SPOJ NSUBSTR
    SPOJ LCS2 多个串的最长公共子串
    SPOJ LCS 后缀自动机找最大公共子串
    POJ 1509 循环同构的最小表示法
    HDU 4821 字符串hash
    SPOJ GSS1 静态区间求解最大子段和
  • 原文地址:https://www.cnblogs.com/tiberius/p/11424043.html
Copyright © 2011-2022 走看看