mitakvd

4. Bomberman

Nov 24th, 2019
173
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.14 KB | None | 0 0
  1. #include <iostream>
  2. #include <string>
  3. #include <sstream>
  4. #include <vector>
  5.  
  6. using namespace std;
  7.  
  8. vector<vector<int>> readInput()
  9. {
  10.     vector<vector<int>> matrix;
  11.     int rows = 0;
  12.     int cols = 0;
  13.     cin >> rows >> cols;
  14.     matrix.resize(rows);
  15.     for (int i = 0; i < rows; ++i)
  16.     {
  17.         string line;
  18.         cin >> line;
  19.         matrix[i].resize(cols);
  20.         for (int j = 0; j < cols; ++j)
  21.         {
  22.             int temp = (int)line[j] - '0';
  23.             matrix[i][j] = temp;
  24.         }
  25.     }
  26.     return matrix;
  27. }
  28.  
  29. bool isInBound(vector<vector<int>>& matrix,
  30.     const int row,
  31.     const int col)
  32. {
  33.     if (row >= 0 &&
  34.         row < (int)matrix.size() &&
  35.         col >= 0 &&
  36.         col < (int)matrix[row].size())
  37.     {
  38.         return true;
  39.     }
  40.  
  41.     return false;
  42. }
  43.  
  44. bool isMined(vector<vector<int>>& matrix, int row, int col, vector<pair<int, int>>& usedBombs)
  45. {
  46.     const int size = usedBombs.size();
  47.     for (int i = 0; i < size; i++)
  48.     {
  49.         if (row == usedBombs[i].first && col == usedBombs[i].second)
  50.         {
  51.             return true;
  52.         }
  53.     }
  54.     return false;
  55. }
  56.  
  57. int getPoints(vector<vector<int>>& data, int row, int col, int power, vector<pair<int, int>>& bombs)
  58. {
  59.     int result = 0;
  60.     if (power == 0)
  61.     {
  62.         if (!isMined(data, row, col, bombs))
  63.         {
  64.             result += data[row][col];
  65.             bombs.push_back(pair<int, int>(row, col));
  66.         }
  67.         //result = data[row][col];
  68.         //bombs.push_back(pair<int, int>(row, col));
  69.     }
  70.     else
  71.     {
  72.         for (int i = 1; i <= power; i++)
  73.         {
  74.             //left
  75.             if (isInBound(data, row, col - i) && !isMined(data, row, col - i, bombs))
  76.             {
  77.                 result += data[row][col - i];
  78.                 bombs.push_back(pair<int, int>(row, col - i));
  79.             }
  80.  
  81.             //right
  82.             if (isInBound(data, row, col + i) && !isMined(data, row, col + i, bombs))
  83.             {
  84.                 result += data[row][col + i];
  85.                 bombs.push_back(pair<int, int>(row, col + i));
  86.             }
  87.  
  88.             //top
  89.             if (isInBound(data, row - i, col) && !isMined(data, row - i, col, bombs))
  90.             {
  91.                 result += data[row - i][col];
  92.                 bombs.push_back(pair<int, int>(row - i, col));
  93.             }
  94.  
  95.             //bottom
  96.             if (isInBound(data, row + i, col) && !isMined(data, row + i, col, bombs))
  97.             {
  98.                 result += data[row + i][col];
  99.                 bombs.push_back(pair<int, int>(row + i, col));
  100.             }
  101.  
  102.             //center
  103.             if (!isMined(data, row, col, bombs))
  104.             {
  105.                 result += data[row][col];
  106.                 bombs.push_back(pair<int, int>(row, col));
  107.             }
  108.         }
  109.     }
  110.     return result;
  111. }
  112. int main()
  113. {
  114.     vector<vector<int>> matrix = readInput();
  115.  
  116.     int numberOfCommands;
  117.     cin >> numberOfCommands;
  118.     cin.ignore();
  119.     int power = 0;
  120.  
  121.     vector<pair<int, int>> usedBombs;
  122.  
  123.     for (int i = 0; i < numberOfCommands; i++)
  124.     {
  125.         string command;
  126.         getline(cin, command);
  127.  
  128.         if (command == "power up")
  129.         {
  130.             ++power;
  131.             cout << "Increased bomb power to " << power << endl;
  132.         }
  133.         else if (command == "power down")
  134.         {
  135.             --power;
  136.             if (power < 0)
  137.             {
  138.                 power = 0;
  139.             }
  140.             cout << "Decreased bomb power to " << power << endl;
  141.         }
  142.         else
  143.         {
  144.             istringstream istr(command);
  145.             string word, rowInStr, colInStr;
  146.             istr >> word >> rowInStr >> colInStr;
  147.             int row = stoi(rowInStr);
  148.             int col = stoi(colInStr);
  149.             int points = getPoints(matrix, row, col, power, usedBombs);
  150.             cout << points << " points" << endl;
  151.             points = 0;
  152.         }
  153.     }
  154.     return 0;
  155. }
Advertisement
Add Comment
Please, Sign In to add comment