Cod sursa(job #2010395)

Utilizator Laura_CorneiLaura Maria Cornei Laura_Cornei Data 12 august 2017 22:00:23
Problema Bowling Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.92 kb
#include <fstream>
using namespace std;
fstream f1 ("bowling.in", ios::in);
fstream f2 ("bowling.out", ios::out);
int t,  secv[50005], spg[50005];
long int n, nrg, nrp[50005], rez;
void spargue_grundy()
{
     long int i;
     ///fct e periodica
      for(i=1; i<=50000; 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;
       spg[15]=7;
       spg[18]=3;
       spg[21]=4;
       spg[22]=6;
       spg[28]=5;
       spg[30]=7;
       spg[39]=3;
       spg[57]=4;
       spg[70]=6;
}
void citire()
{
    long int i;
    f1>>n;
    for(i=1; i<=n; i++) {f1>>secv[i];nrp[i]=0;}
    nrg=0;
}
void grupuri_nim()
{
    long int i;
    i=1;
   while(i<=n)
    {
        while((i<=n)&&(!secv[i])) i++;
        if(i<=n) nrg++;
        while((i<=n)&&(secv[i])) {i++;nrp[nrg]++;}
    }
}
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])
   f1>>t;
   spargue_grundy();
   for(int tes=1; tes<=t; tes++)
   {
      citire();
      grupuri_nim();
      solve();
   }

   return 0;
}