由于今天考试一道题都没有AC,所以写这道题来增加自信。水博客,可以考虑不看。
(传送门)
依旧是Nim游戏,不过取得石子个数要求是斐波那契数列中的数字
就是纯SG函数裸题,SG函数可以预先求,然后后面O(1)判断就行了。反正只是水博客的。
#include<cstdio> #include<cstring> using namespace std; int x,y,z,f[1005],sg[1005]; bool vs[1005]; void _work() { sg[0]=0; f[0]=f[1]=1; for (int i=2;f[i-1]<=1000;i++) f[i]=f[i-1]+f[i-2]; for (int i=1;i<=1000;i++){ memset(vs,0,sizeof(vs)); for (int j=1;f[j]<=i;j++) vs[sg[i-f[j]]]=true; for (int j=0;j<=1000;j++) if (!vs[j]) {sg[i]=j; break;} } } inline void readi(int &x){ x=0; char ch=getchar(); while ('0'>ch||ch>'9') ch=getchar(); while ('0'<=ch&&ch<='9'){x=x*10+ch-'0'; ch=getchar();} } int main() { freopen("fibonacci.in","r",stdin); freopen("fibonacci.out","w",stdout); _work(); readi(x); readi(y); readi(z); while (x!=0||y!=0||z!=0){ if (sg[x]^sg[y]^sg[z]) printf("Fibo\n"); else printf("Nacci\n"); readi(x); readi(y); readi(z); } return 0; }Orz 今天考试考了高分的Matchperson