Pe o tablă de şah cu n
linii şi n
coloane se află firimituri de pâine şi o furnică. Pentru fiecare pătrăţel, inclusiv cel în care se găseşte furnica, aflat pe linia i
şi coloana j
, cantitatea de firimituri de pâine este egală cu restul împărţirii lui i+j
la 6
. Astfel pentru n=4
tabla de şah conţine următoarele cantităţi de firimituri:
Furnica (notată cu F
în figură) se poate deplasa din pătrăţelul unde se găseşte în toate cele opt pătrăţele vecine, numerotate ca mai jos:
Furnica se deplasează, pornind din pătrăţica aflată în colţul din stânga sus, în una dintre pătrăţelele vecine, şi aşa mai departe. Pe drumul său furnica se hrăneşte cu toată cantitatea de firimituri din pătrăţelele prin care a trecut (după ce iese din pătrăţică catitatea de firimituri devine 0
). Drumul furnicii este dat printr-un şir de k
numere naturale (cuprinse între 1
şi 8
) care precizează, la fiecare pas, următorul pătrăţel din drum.
Cerința
Scrieţi un program care pentru un drum dat determină cantitatea totală de firimituri mâncată de furnică, precum şi numărul pătrăţelelor prin care aceasta a trecut de cele mai multe ori.
Date de intrare
Fişierul de intrare furnica.in
conţine pe prima linie numerele n
şi k
, separate între ele printr-un spaţiu, iar pe linia următoare k
numere naturale (1, 2, 3, 4, 5, 6, 7 sau 8)
separate prin câte un spaţiu, reprezentând următorul pătrăţel din drum pentru un pătrăţel curent.
Date de ieșire
Fişierul de ieşire furnica.out
va conţine, pe prima linie, cantitatea totală şi numărul pătrăţelelor din cerinţă separate printr-un spaţiu.
Restricții și precizări
1 < n < 101
0 < k < 201
- Drumul furnicii nu iese din tablou.
Exemplu
furnica.in
4 10 3 6 5 3 2 6 3 6 2 3
furnica.out
23 2
Explicație
Drumul furnicii trece prin pătrăţelele (linie, coloană) următoare:
(1,1)->(1,2)->(2,1)->(3,1)->(3,2)->(2,3)->(3,2)->(3,3)->(4,2)->(3,3)->(3,4)
.
Pe drum se mănâncă următoarea cantitate de firimituri: 2+3+3+4+5+5+0+0+0+0+1=23
Prin pătrăţelele de coordonate (3,2)
şi (3,3)
se trece de cele mai multe ori (de două ori).
Cum e corect?
cout < "As la info";
cout << "As la info";
cout >> "As la info";
Felicitări! Poți mai mult?
Avem sute de probleme pentru tine, fiecare cu explicații ușor de înțeles.
Greșit, dar nu-i bai!
Antrenează-te cu sutele de probleme pe care ți le-am pregătit. Îți explicăm fiecare problemă în parte.
Rezolvare
Iată rezolvarea de 100 de puncte pentru problema Furnica:
#include <iostream>
#include <fstream>
using namespace std;
ifstream f ("furnica.in");
ofstream g ("furnica.out");
int n,i,j,b[250],c[200][200],nn,x=1,y=1,a[200][200],s,maxx,r;
int main()
{
f>>n;
f>>nn;
for(i=1;i<=nn;i++)
{
f>>b[i];
}
for(i=1;i<=n;i++)
{
for(j=1;j<=n;j++)
{
a[i][j]=(i+j)%6;
}
}
s=s+a[x][y];
a[x][y]=0;
c[x][y]++;
for(i=1;i<=nn;i++)
{
if(b[i]==1){x--;}
if(b[i]==2){x--;y++;}
if(b[i]==3){y++;}
if(b[i]==4){x++;y++;}
if(b[i]==5){x++;}
if(b[i]==6){x++;y--;}
if(b[i]==7){y--;}
if(b[i]==8){x--;y--;}
s=s+a[x][y];
a[x][y]=0;
c[x][y]++;
}
g<<s;
for(i=1;i<=n;i++)
{
for(j=1;j<=n;j++)
{
if(maxx<c[i][j])maxx=c[i][j];
}
}
for(i=1;i<=n;i++)
{
for(j=1;j<=n;j++)
{
if(maxx==c[i][j])r++;
}
}
g<<" "<<r;
return 0;
}
Atenție
Enunțurile afișate pe această pagină aparțin exclusiv site-ului PbInfo. Astfel, pentru ștergerea conținutului, puteți să ne contactați la adresa .
Rezolvarea problemei #2178 Furnica
Pe această pagină găsești rezolvarea de 100 de puncte pentru problema #2178 Furnica de pe PbInfo.ro. Atenție: nu încurajăm copiatul codului! Totuși, credem cu tărie că analizarea unei soluții corecte este o metodă foarte ușoară de a învăța informatică, astfel că oferim sursele pentru peste 1500 de probleme de pe platforma PbInfo.ro.
Pentru rezolvări PbInfo de la peste 1500 de probleme, vă invităm să intrați pe site-ul nostru!