Cod sursa(job #264545)

Utilizator c_sebiSebastian Crisan c_sebi Data 22 februarie 2009 11:59:01
Problema Bowling Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.9 kb
#include <fstream.h>

int g[5001], a[5001];

int mex(int a[], int n){
	int nr=0, i, ok;
	while(1){
		for(i = 0, ok = 1; i < n && ok; i++)
			if(a[i] == nr) ok = 0;
		if(ok) return nr;
		nr++;
	}

}

void grundy(){

	int i, j, n=85, k;
	g[0] = 0; g[1] = 1;
	for(i = 2; i < n; i++) {
		for(k = 0, j = 1; j <= i; j++){
			a[k++] = g[j-1]^g[i-j];
			if(j < i) a[k++] = g[j-1]^g[i-j-1];
		}
		g[i] = mex(a, k);
	}
}

int main(){
	ifstream f("bowling.in");
	ofstream fout("bowling.out");
	int T, i, nr, REZ, x, G, n;
	grundy();
	f>>T;
	while(T--){
		f>>n;
		REZ = 0;        nr = 0;
		for(i = 0; i <= n; i++){
			if(i < n) f>>x; else x = 0;
			if(x == 1) nr++;
			else {  if(nr < 72) G = g[nr];
								else G = g[72 + nr%12];
							REZ ^= G;
							nr = 0;
			}
		}
		if(REZ) fout<<"Nargy\n";
		else fout<<"Fumeanu\n";

	}
	f.close();
	fout.close();
	return 0;
}