Cod sursa(job #36247)

Utilizator dominoMircea Pasoi domino Data 23 martie 2007 11:46:18
Problema Bowling Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.02 kb
#include <stdio.h>
#include <string.h>

#define MAX_G 84
#define FIN "bowling.in"
#define FOUT "bowling.out"

int T, N;
char G[MAX_G], U[10];

inline int grundy(int n)
{
    return n < 72 ? G[n] : G[72+(n-72)%12];
}

int main(void)
{
    int i, j, x, cnt, res;

    freopen(FIN, "r", stdin);
    freopen(FOUT, "w", stdout);

    for (G[0] = 0, i = 1; i < MAX_G; i++)
    {
        memset(U, 0, sizeof(U));
        for (j = 1; j <= i; j++)
        {
            U[G[j-1]^G[i-j]] = 1;
            if (j < i) U[G[j-1]^G[i-j-1]] = 1;
        }
        for (G[i] = 0; U[G[i]]; G[i]++);
    }

    for (scanf("%d", &T); T; T--)
    {
        scanf("%d", &N);
        for (res = cnt = i = 0; i < N; i++)
        {
            scanf("%d", &x);
            if (x) cnt++;
            else 
            { 
                res ^= grundy(cnt); 
                cnt = 0; 
            }
        }
        if (cnt) res ^= grundy(cnt);

        printf("%s\n", res ? "Nargy" : "Fumeanu");
    }


    return 0;
}