HDU-1517 A Multiplication Game(找规律,类似巴什博弈)¶
Description¶
Stan and Ollie play the game of multiplication by multiplying an integer p by one of the numbers 2 to 9. Stan always starts with p = 1, does his multiplication, then Ollie multiplies the number, then Stan and so on. Before a game starts, they draw an integer 1 < n < 4294967295
and the winner is who first reaches p >= n
.
Input¶
Each line of input contains one integer number n.
Output¶
For each line of input output one line either
Stan wins.
or
Ollie wins.
assuming that both of them play perfectly.
Sample Input¶
162
17
34012226
Sample Output¶
Stan wins.
Ollie wins.
Stan wins.
#include <iostream>
#include <iomanip>
#include <vector>
#include <cmath>
#include <string>
#include <climits>
#include <cstdio>
#include <queue>
#include <stack>
#include <map>
#include <set>
#include <set>
#include <algorithm>
using namespace std;
int main()
{
std::ios_base::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
double n;
while (cin >> n) {
while (n > 18) { n /= 18; }
if (n <= 9) cout << "Stan wins." << endl;
else cout << "Ollie wins." << endl;
}
return 0;
}
如果在1 \sim 9,先手获胜,如果在10 \sim 18,则后手获胜,后面的数字依次除以18,看最后落入哪个区间。注意每一步计算的时候要取浮点数