Cod sursa(job #984315)

Utilizator superman_01Avramescu Cristian superman_01 Data 14 august 2013 01:23:24
Problema Bowling Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.28 kb
#include <fstream>
#include <algorithm>
#include <utility>
#include <vector>
#include <queue>
#include <stack>
#include <queue>
#include <cstring>

#define NMAX 90
#define get_min( a , b ) ((a)<(b)?(a):(b))
#define get_max( a , b)  ((a)>(b)?(a):(b))

using namespace std;


ifstream in("bowling.in");
ofstream out("bowling.out");

int SG[NMAX];
bool used[15];
int N,T;

inline int mex  (  )
{
 	int  i ;
	for( i = 0 ; i <= 15 ; ++i )
		if( used[i] == false ) return i;
   return 0 ;
}
int Period ( int x )
{
	if ( x > 72 )
		return 72 + ( x-72) % 12 ;
	return x ;
}

void Preprocess ( void )
{
	int  i , j ;
	SG[0] = 0 ;
	for( i = 1 ; i <= 84 ; ++i )
	{
		memset(used,0,sizeof(used));		
		for( j = 1 ; j <= i ; ++j )
		{
			used[SG[j-1]^SG[i-j]] = true ;
			if( j < i )
              used [ SG[j-1]^SG[i-j-1] ] = true  ;
		}
		SG[i] = mex ();
	}
}
int main ( void )
{	
	int i , j , len,S;
	Preprocess();
	in >> T ;
	for ( ; T > 0 ; --T )
	{
		in >> N ;
		len = 0 ;S = 0 ;
		for ( i = 1 ; i <= N ; ++i )
		{
			int popi;
			in >> popi ;
			if ( popi == 1 )
				++len;
			else
			{
				if( len ) 
				S ^=SG[Period(len)];
				len = 0 ;
			}
		}
		if( len )
			S ^= SG[Period(len)];
		out << ( S > 0 ? "Nargy\n" : "Fumeanu\n");
	}
}