Pagini recente » Cod sursa (job #355397) | Cod sursa (job #2135428) | Cod sursa (job #111187) | Cod sursa (job #3177531) | Cod sursa (job #184787)
Cod sursa(job #184787)
#include <stdio.h>
#define NM 50010
int n, m, t;
int a[NM], sg[NM], s[NM];
int i, j, k, l, sxor;
int SG(int l);
int main()
{
freopen("bowling.in", "r", stdin);
freopen("bowling.out", "w", stdout);
for ( i = 0; i <= 84; sg[i] = -1, i++ );
for ( i = 0; i <= 84; i++ ) SG(i);
for ( i = 85; i <= NM-1; i++ ) sg[i] = sg[i-12];
scanf("%d", &t);
while ( t )
{
t--;
k = l = 0; scanf("%d", &n);
for ( i = 1; i <= n; i++ )
{
scanf("%d", &j);
if ( j == 1 ) l++;
else k++, a[k] = l, l = 0;
}
if ( l ) k++, a[k] = l;
sxor = 0;
for ( i = 1; i <= k; i++ )
sxor = sxor ^ sg[a[i]];
if ( sxor == 0 ) printf("Fumeanu\n");
else printf("Nargy\n");
}
return 0;
}
int SG(int l)
{
if ( l == 0 ) return sg[0] = 0;
if ( l == 1 ) return sg[1] = 1;
if ( sg[l] != -1 ) return sg[l];
int i;
for ( i = 0; i <= l; s[i] = 0, i++ );
for ( i = 0; i <= (l-2)/2; i++ )
s[SG(i)^SG(l-i-2)] = 1;
for ( i = 0; i <= (l-1)/2; i++ )
s[SG(i)^SG(l-i-1)] = 1;
for ( i = 0; i <= l+1; i++ )
if ( s[i] == 0 ) break;
return sg[l] = i;
}