HDOJ1517[K(2~9)倍博弈][有规律存在]
2013-07-12 11:27
381 查看
题目:链接
题目:
[align=left]Problem Description[/align]
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
[align=left]Input[/align]
Each line of input contains one integer number n.
[align=left]Output[/align]
For each line of input output one line either
Stan wins. or Ollie wins.
assuming that both of them play perfectly.
[align=left]Sample Input[/align]
162
17
34012226
[align=left]Sample Output[/align]
Stan wins.
Ollie wins.
Stan wins.题目意思是说:两个人乘数,给出的数从1开始,两个人乘的时候可以给原数乘以2到9之间的任何数,现在给出一个数n,判断在两者都采取最优策略的情况下,谁先能够使得乘完之后的数大于等于,谁就胜利。。。。
题目:
[align=left]Problem Description[/align]
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
[align=left]Input[/align]
Each line of input contains one integer number n.
[align=left]Output[/align]
For each line of input output one line either
Stan wins. or Ollie wins.
assuming that both of them play perfectly.
[align=left]Sample Input[/align]
162
17
34012226
[align=left]Sample Output[/align]
Stan wins.
Ollie wins.
Stan wins.题目意思是说:两个人乘数,给出的数从1开始,两个人乘的时候可以给原数乘以2到9之间的任何数,现在给出一个数n,判断在两者都采取最优策略的情况下,谁先能够使得乘完之后的数大于等于,谁就胜利。。。。
解题思路: 如果输入是 2 ~ 9 ,因为Stan 是先手,所以Stan 必胜 如果输入是 10~18 ,因为Ollie 是后手,不管第一次Stan 乘的是什么,Stan肯定在 2 ~ 9 之间, 如果Stan乘以 2 ,那么Ollie就乘以 9 ,就到18了,如果Stan乘以 9 , 那么Ollie乘以大于1的数都都能超过 10 ~ 18 中的任何一个数。Ollie 必胜 如果输入是 19 ~ 162,那么这个范围是 Stan 的必胜态 如果输入是 163 ~ 324 ,这是又是Ollie的必胜态 ............ 必胜态是对称的!!! 双方都很聪明,所以这样胜负就决定于N了,如果N不断除 18后的得到不足18的数M,如果1<M<=9则先手胜利,即Stan wins.如果9<M<=18 则后手胜利.
这样就直接对N进行除18,得到进行判断即可...上代码:
#include <iostream> #include <cstdio> #include <string> #include <string.h> #include <map> #include <vector> #include <cstdlib> #include <cmath> #include <algorithm> #include <cmath> #include <queue> #include <set> #include <stack> using namespace std; int min(int a, int b) { if(a<=b) return a; return b; } int max(int a, int b) { if(a>=b) return a; return b; } double min(double a, double b) { if(a<=b) return a; return b; } double max(double a, double b) { if(a>=b) return a; return b; } int main() { double n; while(scanf("%lf", &n) != EOF) { while(n>18) n /= 18; if(n <= 9) printf("Stan wins.\n"); else printf("Ollie wins.\n"); } return 0; }
努力努力...
相关文章推荐
- HDOJ1525 [找规律博弈]
- HDOJ 4203 Doubloon Game 博弈 找规律
- hdu 1517 A Multiplication Game (博弈——找规律)
- POJ 1082 Calendar Game 找规律博弈(存在特殊情况)
- hdu 1517 A Multiplication Game (博弈——找规律)
- HDOJ2897(巴什博弈变形-找规律)
- hdu 1517 A Multiplication Game (博弈——找规律)
- hdu 1517 A Multiplication Game (博弈——找规律)
- HDU 1517 A Multiplication Game (博弈、PN态、找规律)*
- hdu 1517 A Multiplication Game (博弈——找规律)
- hdu 1517 K(2~9)倍博弈
- hdu 1517 K(2~9)倍博弈
- hdu 1517 A Multiplication Game(博弈找规律)
- hdu 1517 A Multiplication Game (博弈——找规律)
- HDOJ1079&POJ1082&ZOJ1024 Calendar Game [找规律博弈]
- hdu 1517 A Multiplication Game (博弈——找规律)
- hdoj 1517 A Multiplication Game(博弈问题(关键在寻找必胜点))
- hdu 1517 A Multiplication Game (博弈——找规律)
- HDU_1517_博弈(巧妙规律)
- hdu 1517 A Multiplication Game (博弈——找规律)