http://acm.hdu.edu.cn/showproblem.php?pid=2149
分析:就是巴什博弈的概念。
题目要求:对于每组数据,在一行里按递增的顺序输出Lele第一次可以加的价。两个数据之间用空格隔开。
如果Lele在第一次无论如何出价都无法买到这块土地,就输出"none"。
刚刚给人写留言求教一个问题,刚发完就想明白了。呵呵,我就是这样的人,傻傻的。
(1)开始还是老规矩先判断m%(n+1)==0?如果==0的话,lelel必败,输出none
(2)当m<n的时候,直接输出m到n的数肯定满足条件,是lele赢的。
(3)当m>n的时候,输出的是m%(n+1).
(1),(3)是巴士博弈求解方法,这题自己分析下多加个条件(2)就行了。哈哈哈,继续fight.
View Code
// I'm lanjiangzhou //C #include <stdio.h> #include <stdlib.h> #include <string.h> #include <ctype.h> #include <math.h> #include <time.h> //C++ #include <iostream> #include <algorithm> #include <cstdio> #include <cstdlib> #include <cmath> #include <cstring> #include <cctype> #include <stack> #include <string> #include <list> #include <queue> #include <map> #include <vector> #include <deque> #include <set> using namespace std;//*************************OUTPUT************************* #ifdef WIN32 #define INT64 "%I64d" #define UINT64 "%I64u" #else #define INT64 "%lld" #define UINT64 "%llu" #endif//**************************CONSTANT*********************** #define INF 0x3f3f3f3f// aply for the memory of the stack //#pragma comment (linker, "/STACK:1024000000,1024000000") //endint main(){int n,m;while(scanf("%d%d",&n,&m)!=EOF){int s;s=n%(m+1);if(s==0){printf("none\n");}else if(n<m){for(int i=n;i<=m;i++){if(i==m)printf("%d",i);elseprintf("%d ",i);}printf("\n");}else printf("%d\n",s);}return 0; }