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
");
        else printf("Second win
");
    }
}
原文地址:https://www.cnblogs.com/sweat123/p/4759344.html