Pagini recente » Monitorul de evaluare | Cod sursa (job #1687989) | Energii | Autentificare | Cod sursa (job #2010015)
#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;
}