Advertisement
Guest User

Untitled

a guest
Nov 20th, 2019
148
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.37 KB | None | 0 0
  1. #include <iostream>
  2. #include <queue>
  3. #include <vector>
  4. #include "main.h"
  5.  
  6. using namespace std;
  7.  
  8. struct apple {
  9.     int row, col;
  10.     bool isRotten;
  11.  
  12.     apple(int _row, int _col, bool _isRotten) {
  13.         row = _row;
  14.         col = _col;
  15.         isRotten = _isRotten;
  16.     }
  17.  
  18.     apple() {
  19.         row = 0;
  20.         col = 0;
  21.         isRotten = false;
  22.     }
  23. };
  24.  
  25. bool isOutOfBounds(apple a, int rows, int cols) {
  26.     if (a.row < 0 || a.row >= rows || a.col < 0 || a.col >= cols) {
  27.         return true;
  28.     }
  29.     return false;
  30. }
  31.  
  32. int main() {
  33.     int rottenCount = 0;
  34.     int rows, cols, days;
  35.     cin >> rows >> cols >> days;
  36.     queue<apple> rotten = queue<apple>();
  37.     vector<vector<apple>> apples = vector<vector<apple>>();
  38.     for (int i = 0; i < rows; i++) {
  39.         vector<apple> row = vector<apple>();
  40.         for (int j = 0; j < cols; j++) {
  41.             row.push_back(apple(i, j, false));
  42.         }
  43.         apples.push_back(row);
  44.     }
  45.     int rottenX, rottenY;
  46.     while (cin >> rottenX >> rottenY) {
  47.         apples[rottenX - 1][rottenY - 1].isRotten = true;
  48.         rotten.push(apple(rottenX - 1, rottenY - 1, true));
  49.         rottenCount++;
  50.     }
  51.  
  52.     for (int i = 0; i < days; i++) {
  53.         int size = rotten.size();
  54.         for (int j = 0; j < size; j++) {
  55.             apple curr = rotten.front();
  56.             //add left (from current) apple to rotten
  57.             apple left = apple(curr.row, curr.col - 1, true);
  58.             if (!isOutOfBounds(left, rows, cols) && !apples[curr.row][curr.col - 1].isRotten) {
  59.                 rottenCount++;
  60.                 apples[curr.row][curr.col - 1].isRotten = true;
  61.                 rotten.push(left);
  62.             }
  63.             //add right (from current) apple to rotten
  64.             apple right = apple(curr.row, curr.col + 1, true);
  65.             if (!isOutOfBounds(right, rows, cols) && !apples[curr.row][curr.col + 1].isRotten) {
  66.                 rottenCount++;
  67.                 apples[curr.row][curr.col + 1].isRotten = true;
  68.                 rotten.push(right);
  69.             }
  70.             //add down (from current) apple to rotten
  71.             apple down = apple(curr.row + 1, curr.col, true);
  72.             if (!isOutOfBounds(down, rows, cols) && !apples[curr.row + 1][curr.col].isRotten) {
  73.                 rottenCount++;
  74.                 apples[curr.row + 1][curr.col].isRotten = true;
  75.                 rotten.push(down);
  76.             }
  77.             //add up (from current) apple to rotten
  78.             apple up = apple(curr.row - 1, curr.col, true);
  79.             if (!isOutOfBounds(up, rows, cols) && !apples[curr.row - 1][curr.col].isRotten) {
  80.                 rottenCount++;
  81.                 apples[curr.row - 1][curr.col].isRotten = true;
  82.                 rotten.push(up);
  83.             }
  84.             rotten.pop();
  85.         }
  86.     }
  87.  
  88.     cout << rows * cols - rottenCount;
  89.     return 0;
  90. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement