#2178 pbinfo
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
Răspunsuri la întrebare
Răspuns de
4
#include
using namespace std;
int a[101][101];
int di[9];
int dj[9];
int b[101][101];
int main() {
ifstream cin ("furnica.in");
ofstream cout ("furnica.out");
int n, s, k;
cin >> n;
di[1] = -1; di[2] = -1; di[3]= 0; di[4] = 1; di[5] = 1; di[6] = 1; di[7] = 0; di[8] = -1;
dj[1] = 0; dj[2] = 1; dj[3] = 1; dj[4] = 1; dj[5] = 0; dj[6] = -1; dj[7] = -1; dj[8] = -1;
for (int i = 1; i <= n; i++)
for (int j = 1; j <= n; j++)
a[i][j] = (i + j) % 6;
s = a[1][1];
b[1][1]++;
cin >> k;
int val;
int i = 1, j = 1;
for (int ll = 0; ll < k; ll++) {
cin >> val;
i += di[val];
j += dj[val];
s += a[i][j];
a[i][j] = 0;
b[i][j]++;
}
cout << s << " ";
int max = 0, sol = 0;
for (int i = 1; i <= n; i++)
for (int j = 1; j <= n; j++){
if(b[i][j] > max){
max = b[i][j];
sol = 1;
}
else if(b[i][j] == max)
sol++;
}
cout << sol;
return 0;
}
using namespace std;
int a[101][101];
int di[9];
int dj[9];
int b[101][101];
int main() {
ifstream cin ("furnica.in");
ofstream cout ("furnica.out");
int n, s, k;
cin >> n;
di[1] = -1; di[2] = -1; di[3]= 0; di[4] = 1; di[5] = 1; di[6] = 1; di[7] = 0; di[8] = -1;
dj[1] = 0; dj[2] = 1; dj[3] = 1; dj[4] = 1; dj[5] = 0; dj[6] = -1; dj[7] = -1; dj[8] = -1;
for (int i = 1; i <= n; i++)
for (int j = 1; j <= n; j++)
a[i][j] = (i + j) % 6;
s = a[1][1];
b[1][1]++;
cin >> k;
int val;
int i = 1, j = 1;
for (int ll = 0; ll < k; ll++) {
cin >> val;
i += di[val];
j += dj[val];
s += a[i][j];
a[i][j] = 0;
b[i][j]++;
}
cout << s << " ";
int max = 0, sol = 0;
for (int i = 1; i <= n; i++)
for (int j = 1; j <= n; j++){
if(b[i][j] > max){
max = b[i][j];
sol = 1;
}
else if(b[i][j] == max)
sol++;
}
cout << sol;
return 0;
}
Alte întrebări interesante
Matematică,
8 ani în urmă
Biologie,
8 ani în urmă
Matematică,
9 ani în urmă
Engleza,
9 ani în urmă
Matematică,
9 ani în urmă
Matematică,
9 ani în urmă
Matematică,
9 ani în urmă