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;
    }
  • 相关阅读:
    [非专业翻译] Mapster
    Js 之TreeGrid使用
    Java 之无限级分类
    Layui 之layedit动态赋值
    Java 之配置修改代码不重启服务器
    Java 之QueryRunner实现增删改查
    Java 之c3p0连接池 + dbutils例子
    PHP 之阿里云短信插件
    Java 之数据库工具类
    Java 之myEclipse破解代码
  • 原文地址:https://www.cnblogs.com/tiberius/p/11424043.html
Copyright © 2011-2022 走看看