zoukankan      html  css  js  c++  java
  • HDU 1517 A Multiplication Game

    题意:开始的时候p=1,2个人轮流对p进行操作,每次操作中,他们可以选择把p乘上一个数,这个数的范围是2-9。现在的问题是,给你一个n,两人轮流操作,谁先把p操作到p>=n谁就获胜,两人都采用最优策略,问谁获胜。

    根据给定的n,可以找出一些必胜、必败的区间。不如说给出的n是162,那么必败的区间是[18,161],必胜的区间是[9,17]。显然先手一次就可以把p的值直接变成9,所以先手可以获胜。然后去递推这些区间就行了,直到递推到区间左边的值为小于10的数。然后判断一下这个区间是必胜的还是必败的区间,被谁取到就可以了。

     1 #include <iostream>
     2 using namespace std;
     3 
     4 int main()
     5 {
     6     long long int x;
     7     while(cin>>x){
     8         int cnt = 0,tmp;
     9         while(x >= 10){
    10             cnt++;
    11             if(cnt&1)  tmp = 9;
    12             else       tmp = 2;
    13             int t = x % tmp;
    14             x /= tmp;
    15             if(t)   x++;
    16             //cout<<"x="<<x<<endl;
    17         }
    18         if(cnt%2 == 0 || (cnt%2 == 1 && x >= 3))   cout<<"Stan wins.
    ";
    19         else    cout<<"Ollie wins.
    ";
    20     }
    21     return 0;
    22 }
    View Code
  • 相关阅读:
    line-block,white-space,overflow
    JS操作cookie
    C#的位运算
    小常识:变量的修饰符和DEMO
    JS等号的小注释
    关于谷歌浏览器的小常识
    P2568 GCD
    P2522 [HAOI2011]Problem b
    P3455 [POI2007]ZAP-Queries
    P1447 [NOI2010]能量采集
  • 原文地址:https://www.cnblogs.com/zhexipinnong/p/3413221.html
Copyright © 2011-2022 走看看