hdu2516 博弈
找规律,发现时斐波那契数列;打表上。
#include<stdio.h> #include<string.h> #define maxn 2147483647 __int64 vis[100]; int count; void init() { memset(vis,0,sizeof(vis)); __int64 l1,l2; count=0; l1=2; l2=3; while(1) { if(l1>maxn) break; vis[count++]=l1; vis[count++]=l2; __int64 t=l1+l2; l2=t+l2; l1=t; } } int find(__int64 v) { int l,r,m; l=0; r=count-1; while(l<=r) { m=(l+r)/2; if(v==vis[m]) return m; else if(v<vis[m]) r=m-1; else l=m+1; } return -1; } int main() { int i; __int64 n; init(); /*for(i=0;i<46;i++) printf("%d ",vis[i]); puts("");*/ while(scanf("%I64d",&n)!=EOF) { if(!n)break; int ans=find(n); if(ans==-1) printf("First win\n"); else printf("Second win\n"); } }