Формат на входа:
От първия ред на стандартния вход за всеки пример са дадени N , M и T. От следващите два реда има по 2 числа -- ред и стълб, в които се намира гнила ябълка в първоначалния момент.
Ограничения:
0 < N <= M <= 1000
0 < T <= 100
Формат на изхода:
На отделен ред за всеки пример на стандартния изход да се изведе търсения брой здрави ябълки.
Примерен вход 1:
8 10 2
4 8
2 7
Примерен изход 1:
59
Примерен вход2:
3 3 1
1 2
3 2
Примерен изход 2:
2
Примерен вход 3:
1 203 100
1 1
1 203
Примерен изход3:
1
Задачката е хубава, но нещо не мога да я доизмисля. Това съм постигнала досега, като имам проблеми :
-понякога загнила ябълка в края на реда заразява тази от началото на следващия ред
-не съм сигурна как след като отбележа, че една ябълка ще бъде развалена на следващия ден, без да се получи погрешно тълкуване, че ябълката е развалена от предишния ден. Примерно при съседна на гнила ябълка
-обърквам се кое е ред кое колона , как задавам координатната система
- Код: Избери целия код
#include <iostream>
using namespace std;
//position safe is position inside the array
bool issafe(int i = 1, int j = 1, int R = 1, int C = 1)
{
if (i >= 1 && j <= R && j >= 1 && i <= C )
return true;
return false;
}
int main()
{
cout << "rows and cols: " << endl;
int R, C;
cin >> R >> C;
cout << "days: " << endl;
int days;
cin>> days;
cout << "x1, y1: " << endl;
int x1, y1;
cin >> x1 >> y1;
cout << "x2, y2: " << endl;
int x2, y2;
cin >> x2 >> y2;
// 0 -> ok apple
// 1 -> rotten apple ( just rotten)
// 2 -> already rotten apple (all adjacent(left, right, bottom , top) elements had already been considered)
//3 - > new rotten (will be rotten next)
int v[R][C] ;
//all apples ok
for(int i = 1 ; i <= R ; i++)
for(int j = 1; j <= C; j++)
v[i][j] = 0;
// 2 rotten apples
v[x1][y1] = 1;
v[x2][y2] = 1;
cout << "before:" << endl;
for(int i = 1; i <= C; i++)
{
for(int j = 1 ; j <= R; j++)
{cout << v[i][j] << " ";
}
cout << endl;
}
cout << "after: " << endl;
for(int k = 0 ; k < days ; k++){ //every day
//rotting apples
for (int i = 1; i <= C; i++) {
for (int j = 1; j <= R; j++) {
// (i+1, j), (i, j-1), (i, j+1), (i-1, j)
if (v[i][j] == 1) { // if is just rotten
if (issafe(i + 1, j, R, C) && v[i + 1][j] == 0) {
v[i + 1][j] = 3; // future rotten
}
if (issafe(i, j + 1, R, C) && v[i][j + 1] == 0) {
v[i][j + 1] = 3;
}
if (issafe(i - 1, j, R, C) && v[i - 1][j] == 0) {
v[i - 1][j] = 3;
}
if (issafe(i, j - 1, R, C) && v[i][j - 1] == 0) {
v[i][j - 1] = 3;
}
v[i][j] = 2; //already rotten
}
// tturn all 3s to 2s but were and how???
}
}//end of rotting apples
} // end of days
int ok = R * C ;
for(int i = 1; i <= C; i++)
{
for(int j = 1 ; j <= R; j++)
{
cout << v[i][j] << " ";
if(v[i][j] !=0) // maybe (v[i][j] !=3)) too
ok--;
}
cout << endl;
}
cout << endl << endl << endl << "ok = " << ok ;
return 0;
}

Меню