hdu 2516 取石子游戏

#include<stdio.h>

__int64 fb[100];

void Init()

{

    //int a=2;

    //int b=3;

    fb[0]=2;

    fb[1]=3;

    for(int i=2;i<50;i++)

    {

        //printf("%d ",a+b);

        fb[i]=fb[i-1]+fb[i-2];

        //printf("%I64d ",fb[i]);

    }

}

int main()

{

    int i,n;

    Init();

    while(scanf("%d",&n)!=EOF&&n)

    {

        for(i=0;i<50;i++)

            if(n==fb[i])break;

        if(i!=50)printf("Second win\n");

        else printf("First win\n");

    }

    return 0;

}
View Code

 

 

首先 2个石头肯定是必败点,3个石头也是必败点,然后开始看后面,4个石头时,可以去一个使对手到必败点,而对手在这种情况下在必败点是不能赢得,所以4是必胜点。但

 

是后面5个石头的情况就不同了,因为5个石头 你肯定不会sb的走到4这个必胜点让对手赢, 但是你发现走到3时,在3这个位置可以直接获胜。 所以5是必败点。

 

在往后推几个就会发现。。。必败点满足斐波那契数列。

你可能感兴趣的:(HDU)