hdu 1517 A Multiplication Game(博弈找规律)
2012-09-05 16:35
381 查看
1 2-----9 、 (9+1) ------- (2*9)、(2*9+1) ------- (2*9*9) 、(2*9*9+1) ------ (2*9*9*2)、(2*9*9*2+1) ------(2*9*9*2*9) ......
N P N P N
S O S O S
*9 *2 *9 *2 *9
P为必败点(下一个选手获胜),N为必胜点(上一个选手获胜)。
这里P、N的划分:
一段N点的最后 *2 是因为P点无论哪种方案到达N点,例如点2*9,就是最后一个可由2乘以9得到的数,一旦大于2*9,则由点2就绝对不能通过乘以2----9的某个数达到(不能满足P的属性)。
一段P点的最后 *9 是因为N点至少有一种方案到达P点,例如 2*9*9 ,只有2*9通过乘以9得到满足条件的数,一旦大于 2*9*9 ,则所有前一个N段中的数都不能通过乘以2-----9的某个数得到满足条件的数,即>=2*9*9+x (x>0)。(不能满足N的属性)
所以,以每段最后一个数作为判断标准。
代码:
N P N P N
S O S O S
*9 *2 *9 *2 *9
P为必败点(下一个选手获胜),N为必胜点(上一个选手获胜)。
这里P、N的划分:
一段N点的最后 *2 是因为P点无论哪种方案到达N点,例如点2*9,就是最后一个可由2乘以9得到的数,一旦大于2*9,则由点2就绝对不能通过乘以2----9的某个数达到(不能满足P的属性)。
一段P点的最后 *9 是因为N点至少有一种方案到达P点,例如 2*9*9 ,只有2*9通过乘以9得到满足条件的数,一旦大于 2*9*9 ,则所有前一个N段中的数都不能通过乘以2-----9的某个数得到满足条件的数,即>=2*9*9+x (x>0)。(不能满足N的属性)
所以,以每段最后一个数作为判断标准。
代码:
#include<iostream> #include<string.h> using namespace std; int main() { int n; while(scanf("%d",&n)!=EOF) { if(n>=1 && n<=9) {printf("Stan wins.\n"); continue;} bool flag=true; int temp=1; while(temp<n) { if(flag) { temp*=9; flag=false; } else { temp*=2; flag=true; } } if(flag) printf("Ollie wins.\n"); else printf("Stan wins.\n"); } return 0; }
相关文章推荐
- hdu 1517 A Multiplication Game (博弈——找规律)
- HDU 1517 A Multiplication Game(博弈找规律)
- hdu 1517 A Multiplication Game (博弈——找规律)
- hdu 1517 A Multiplication Game (博弈——找规律)
- hdu 1517 A Multiplication Game (博弈——找规律)
- hdu 1517 A Multiplication Game (博弈——找规律)
- hdu 1517 A Multiplication Game (博弈——找规律)
- hdu 1517 A Multiplication Game (博弈——找规律)
- HDU 1517 ——A Multiplication Game(博弈)(找规律)
- hdu 1517 A Multiplication Game (博弈——找规律)
- hdu 1517 A Multiplication Game (博弈——找规律)
- HDU 1517 A Multiplication Game (博弈、PN态、找规律)*
- hdu 1517 A Multiplication Game (博弈——找规律)
- hdu 1517 A Multiplication Game (博弈——找规律)
- hdu 1517 A Multiplication Game (博弈——找规律)
- HDU_1517_博弈(巧妙规律)
- hdu 1517 A Multiplication Game (博弈——找规律)
- hdu 1517 A Multiplication Game (博弈——找规律)
- hdu 1517 A Multiplication Game (博弈——找规律)
- hdu 5708 博弈找规律