Pagini recente » Cod sursa (job #599897) | Borderou de evaluare (job #711036) | Cod sursa (job #40880) | Cod sursa (job #532895) | Cod sursa (job #2010395)
#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;
}