Cod sursa(job #2010015)

Utilizator Laura_CorneiLaura Maria Cornei Laura_Cornei Data 11 august 2017 15:14:23
Problema Bowling Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.84 kb
#include <fstream>
using namespace std;
fstream f1 ("bowling.in", ios::in);
fstream f2 ("bowling.out", ios::out);
int t;
long int n, nrg, nrp[50001], secv[50001], maxi, spg[50001], rez;
void spargue_grundy()
{
     long int i;
     ///fct e periodica
      for(i=1; i<=maxi; i++)
         switch(i%12)
          {
            case 0:spg[i]=4;break;
            case 1:spg[i]=1;break;
            case 2:spg[i]=2;break;
            case 3:spg[i]=8;break;
            case 4:spg[i]=1;break;
            case 5:spg[i]=4;break;
            case 6:spg[i]=7;break;
            case 7:spg[i]=2;break;
            case 8:spg[i]=1;break;
            case 9:spg[i]=8;break;
            case 10:spg[i]=2;break;
            case 11:spg[i]=7;break;
          }
       ///avand cateva exceptii
       spg[0] =0;
       spg[3] =3;
       spg[6] =3;
       spg[9] =4;
       spg[11] =6;
}
void grupuri_nim()
{
    long int i;
    i=1;
   while(i<=n)
    {
        while((i<=n)&&(!secv[i])) i++;
        nrg++;
        while((i<=n)&&(secv[i])) {i++;nrp[nrg]++;}
    }
}
void val_max_grup()
{
     long int i;
     for(i=1; i<=nrg; i++)
            if(maxi< nrp[i]) maxi=nrp[i];
}
void solve()
{
  long int i;
  rez=0;
   for(i=1; i<=nrg; i++)
        rez^=spg[nrp[i]];
   if(rez) f2<<"Nargy"<<"\n";
   else f2<<"Fumeanu"<<"\n";
}
int main()
{
  ///ai nrg gramezi cu cate nrp[i] pietre fiecare
  ///o mutare: iei una/doua pietre din o gramada si imparti gramamda daca vrei in doua gramezi
  ///calc spg pt jocul cu o gramaga cu n pietre iar apoi rez= spg(nrp[1])^spg(nrp[2])^...^spg(nrp[n])
   long int i;
   int tes;
   f1>>t;
   for(tes=1; tes<=t; tes++)
   {
       f1>>n;
       for(i=1; i<=n; i++) f1>>secv[i];
      grupuri_nim();
      val_max_grup();
      spargue_grundy();
      solve();
   }

   return 0;
}