hdu 1517
地址:http://acm.hdu.edu.cn/showproblem.php?pid=1517
题意:从1开始,每个人选择乘2~9中的一个数,谁先大于等于n谁赢。
mark:博弈问题。用逆推的思想。比如n = 1000。那么[999,112]是必败区间,再退一步[111,56]是必胜区间,以此类推……
代码:
#include <stdio.h> int main() { long long n,p; int i; while(~scanf("%I64d", &n)) { if(n == 1) { puts("Stan wins."); continue; } i = 0; while(n != 1) { i++; if(i & 1) n = (n-1)/9 + 1; else n = (n-1)/2 + 1; } puts(i%2 ? "Stan wins." : "Ollie wins."); } return 0; }