Cod sursa(job #484025)

Utilizator SpiderManSimoiu Robert SpiderMan Data 11 septembrie 2010 16:42:52
Problema Bowling Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.25 kb
# include <bitset>
# include <cstdio>
using namespace std ;

const char FIN[] = "bowling.in", FOU[] = "bowling.out" ;
const char S[2][10] = { "Nargy", "Fumeanu" } ;
const int MAX = 84 ;

bitset < 10 > V ;
char SG[MAX] ;
int T, N;

inline int spgr ( int i ) {
    return i < 72 ? SG[i] : SG[72 + ( i - 72 ) % 12 ] ;
}

void prec ( void ) {
    for ( int i = 1; i < MAX; ++i ) {
        V.reset () ;
        for ( int j = 1; j <= i; ++j ) {
            V[ SG[j - 1] ^ SG[i - j] ] = 1 ;
            if ( j < i ) {
                 V[ SG[j - 1] ^ SG[i - j - 1] ] = 1 ;
            }
        }
        for ( SG[i] = 0 ; V[ SG[ i ] ] ; ++SG[i] ) ;
    }
}

int main ( void ) {
    freopen ( FIN, "r", stdin ) ;
    freopen ( FOU, "w", stdout ) ;

    prec () ;

    for ( scanf ( "%d", &T ) ; T ; --T ) {
        scanf ( "%d", &N ) ;
        int sol = 0, nr = 0;
        for ( int i = 0, bw; i < N; ++i ) {
            scanf ( "%d", &bw ) ;
            if ( bw ) {
                ++nr ;
            } else {
                sol ^= spgr ( nr ) ;
                nr = 0;
            }
        }
        if ( nr ) {
             sol ^= spgr ( nr ) ;
        }

        printf ( "%s\n", sol ? S[0] : S[1] ) ;
    }


    return 0;
}