Cod sursa(job #235317)

Utilizator Pepelea_FlaviuFlaviu Pepelea Pepelea_Flaviu Data 23 decembrie 2008 13:16:15
Problema Bowling Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.09 kb
# include <cstdio>

# define FIN "bowling.in"
# define FOUT "bowling.out"
# define max(a,b) (a>b?a:b)
# define MAXN 1005

int T, N, i, j, ct, rez, x;
int SG[MAXN];
int S[MAXN];

    void procesez(int N)
    {
        SG[0] = 0;
        for (i = 1; i <= N; ++i)
           {
               for (j = 0; j <= N; ++j)
                  S[j] = 0;
               
               for (j = 1; j <= i; ++j)
                 {
                    S[SG[j-1]^SG[i-j]] = 1;
                    S[SG[j-1]^SG[max(i-j-1,0)]] = 1;
                 }
               
               for (j = 0; j <= N; ++j)
                 if (S[j] == 0)
                    {
                       SG[i] = j;
                       break;
                    }
           }
    }

    int main()
    {
        freopen(FIN,"r",stdin);
        freopen(FOUT,"w",stdout);
        
        procesez(83); //de la 72 se repeta cu perioada 12
        
        scanf("%d",&T);
        for (; T; --T)
          {
             scanf("%d",&N);
             
             ct = rez = 0;
             for (i = 1; i <= N; ++i)
                {
                    scanf("%d",&x);
                    if (!x)
                      {
                         if (ct <= 71) rez ^= SG[ct];
                           else
                             {
                                ct = (ct - 71) % 12;
                                if (!ct) ct = 12;
                                rez ^= SG[71 + ct];
                             }
                         ct = 0;  
                      } else
                    ++ct;
                }
             
             if (ct)
               {
                  if (ct <= 71) rez ^= SG[ct];
                    else
                      {
                         ct = (ct - 71) % 12;
                         if (!ct) ct = 12;
                         rez ^= SG[71 + ct];
                      }
               }
                
             if (rez) printf("Nargy\n");
               else printf("Fumeanu\n");
          }
        
        return 0;
    }