Cod sursa(job #270076)

Utilizator savimSerban Andrei Stan savim Data 3 martie 2009 18:54:51
Problema Bowling Scor 60
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.27 kb
#include <stdio.h>
#include <algorithm>

using namespace std;

int sg[256], v[512];
int per[12] = {4, 1, 2, 8, 1, 4, 7, 2, 1, 8, 2, 7};
int m, t, n, nr, sol, k, ok;

int main() {

	freopen("bowling.in", "r", stdin);
	freopen("bowling.out", "w", stdout);
	
	for (int i = 1; i < 256; i++) {
		m = 0;
		//iau cate 2
		for (int j = 0; j <= i - 2; j++) {
			//dupa lovitura am j in stanga si i - j - 2 in dreapta
			v[++m] = sg[j] ^ sg[i - j - 2];
		}
		
		//iau cate 1
		for (int j = 0; j <= i - 1; j++) {
			//dupa lovitura am j in stanga si i - j - 1 in dreapta
			v[++m] = sg[j] ^ sg[i - j - 1];
		}
		
		v[0] = -1; 
		sort(v + 1, v + m + 1);
		v[m + 1] = v[m] + 2;
		
		for (int j = 0; j <= m; j++)
			if (v[j] + 1 < v[j + 1]) {
				sg[i] = v[j] + 1;
				break;
			}
	}
	
	scanf("%d", &t); 
	while (t--) {
		scanf("%d", &n); 
		sol = 0; ok = 0;
		
		for (int i = 1; i <= n + 1; i++) {
			
			if (i != n + 1) scanf("%d", &k);
			else k = 0;
			
			if (k) nr++;
			else {
				if (nr) ok = 1;
				
				if (nr < 72) sol ^= sg[nr];
				else {
					nr -= 71; nr %= 12;
					if (!nr) nr = 12;
					sol ^= nr;
				}
				
				nr = 0;
			}
		}
		
		if (!ok) sol = 1;
		if (sol) printf("Nargy\n");
		else printf("Fumeanu\n");
	}
	
	return 0;
}