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
  • 相关阅读:
    java中如何高效的判断数组中是否包含某个元素---
    反射--
    Json----
    Ajax学习(1)
    Jdbc学习---
    java---内部类
    java中的多态
    spring是什么
    quartz的配置文件
    浅谈Job&JobDetail
  • 原文地址:https://www.cnblogs.com/zhexipinnong/p/3413221.html
Copyright © 2011-2022 走看看