• 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
  • 相关阅读:
    jquery选择器
    frameset的target属性
    最长回文子串 南邮NOJ 1100
    最长回文子串 南邮NOJ 1100
    最长回文子串 南邮NOJ 1100
    NOJ 蛇形填数 1094
    NOJ 蛇形填数 1094
    NOJ 蛇形填数 1094
    NOJ 蛇形填数 1094
    开灯问题 南邮NOJ 1589 (另一种解法)
  • 原文地址:https://www.cnblogs.com/zhexipinnong/p/3413221.html
Copyright © 2020-2023  润新知