hdu2149 巴什博奕
n表示先手胜 p表示先手负
1~N N+1 N+2~2*N+1 2*N+2 2*N+3~3*N+2 ...
n p n p n ...
m总归个数 每次取1~N个
根据前面的规律得到,如果m/N==m%N 那么必输,不然必胜。(可能不严谨,有些题目会错)
换一个角度就是每次要给对手留下(n+1)*k+s(k为整数)这样先手必胜。
也就是说m%(n+1)!=0,那么先手必胜。
#include<stdio.h> #include<string.h> #define maxn 1100 int main() { int i,n,m; while(scanf("%d%d",&n,&m)!=EOF) { if(m>=n) { for(i=n;i<=m;i++) if(i==n)printf("%d",i); else printf(" %d",i); printf("\n"); } else if(n/m==n%m) printf("none\n"); else { printf("%d\n",n%(1+m)); } } }