Cod sursa(job #1779201)

Utilizator TimitocArdelean Andrei Timotei Timitoc Data 14 octombrie 2016 22:20:46
Problema Bowling Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.09 kb
#include <iostream>
#include <cstdio>
#include <cstring>
#define MAXN 50050
#define MAXS 210

using namespace std;

int n, a[MAXN];
int sg[MAXS], viz[MAXS];

void prepare()
{
    sg[1] = 1;
    for (int i = 1; i < MAXS; i++) {
        memset(viz, 0, sizeof viz);
        for (int j = 0; j < i; j++) {
			viz[sg[j] ^ sg[i-j-1]] = 1;
			if (i-j-2 >= 0)
				viz[sg[j] ^ sg[i-j-2]] = 1;
        }
        for (int j = 0; j < MAXS; j++)
			if (!viz[j]) {
				sg[i] = j;
				break;
			}
        //cout << sg[i] << ",";
    }
}

void solve()
{
    int run = 0;
    int rez = 0;
    for (int i = 1; i <= n; i++) {
        if (a[i]) run++;
        if ((a[i] == 0 || i == n) && run){
			int sgin = (run < 72 ? run : run % 12 + 72);
			rez ^= sg[sgin];
			run = 0;
        }
    }
    if (rez)
		printf("Nargy\n");
	else
		printf("Fumeanu\n");
}

int main()
{
    freopen("bowling.in", "r", stdin);
    freopen("bowling.out", "w", stdout);

    prepare();
    int t;
    scanf("%d", &t);
    while (t--) {
        scanf("%d", &n);
        for (int i = 1; i <= n; i++)
			scanf("%d", &a[i]);
		solve();
    }

    return 0;
}