取石子(五)
时间限制:
1000 ms | 内存限制:
65535 KB
难度:
4
-
描述
-
himdd最近很想玩游戏,于是他找到acmj和他一起玩,游戏是这样的:有一堆石子,两个人轮流从其中取走一定的石子,取走最后所有石子的人为赢家,不过得遵循如下规则:
1.第一次取不能取完,至少取1颗.
2.从第二次开始,每个人取的石子数至少为1,至多为对手刚取的石子数的两倍。
himdd事先想知道自己会不会赢,你能帮帮他吗?(每次himdd先手)
-
输入
-
有多组测试数据,每组有一个整数n(2<=n<2^64);
输出
- himdd会赢输出Yes,否则输出No; 样例输入
-
2 5 6
样例输出
-
No No Yes
分析:同HDU2516,结束条件不一样(我写的仍是n!=0,所以一直超时),而且数据量加大!要用long long 的,刚开始一直写%I64d,可悲WA无数次!
代码:
#include<stdio.h> #include<string.h> #define N 100 long long num[N],n; int main() { int i; memset(num,0,sizeof(num)); for(i=2,num[0]=1,num[1]=1;i<N;i++) { num[i]=num[i-1]+num[i-2]; } while(scanf("%lld",&n)!=EOF) { for(i=2;i<N;i++) { if(num[i]==n){ printf("No\n"); break; } if(num[i]>n){ printf("Yes\n"); break; } } } system("pause"); return 0; }
-
有多组测试数据,每组有一个整数n(2<=n<2^64);