Cod sursa(job #955044)

Utilizator dariusdariusMarian Darius dariusdarius Data 30 mai 2013 19:13:43
Problema Bowling Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.11 kb
#include<cstdio>
#include<vector>
#include<bitset>
using namespace std;
const int N=50000;
int sg[N+5];
bitset<50005> ver;
void init() 
{
    sg[1]=1;
    for(int i=2;i<=N;i++) 
    {
        ver.reset();
        int p1=(i-1)/2,p2=(i-1)/2+((i-1)&1);
        for(int j=1;j<=20 && p1>=0 && p2<i;j++)
	{
            ver[sg[p1]^sg[p2]]=1;
            --p1;
            ++p2;
        }
        p1=(i-2)/2,p2=(i-2)/2+(i&1);
        for(int j=1;j<=20 && p1>=0 && p2<i;j++)
	{
            ver[sg[p1]^sg[p2]]=1;
            --p1;
            ++p2;
        }
        for(int j=0;j<N;j++)
	   if(!ver[j])
	   {
           	sg[i]=j;
            	break;
           }
    }
}
void solve()
{
    int i,sz=0,t,sol=0,n;
    scanf("%d",&n);
    for(i=1;i<=n;i++) 
    {
        scanf("%d",&t);
        if(t)
            ++sz;
        else
            sol^=sg[sz],
            sz=0;
    }
    sol^=sg[sz];
    if(sol)
	puts("Nargy");
    else
	puts("Fumeanu");
    ///puts(sol?"Nargy\n":"Fumeanu\n");
}
int main()
{
	freopen("bowling.in","r",stdin);
	freopen("bowling.out","w",stdout);
	init();
	int T;
	for(scanf("%d",&T);T;T--)
		solve();
	return 0;
}