Advertisement
Korotkodul

Задача 2. Реверс

Oct 15th, 2021 (edited)
80
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.15 KB | None | 0 0
  1. #include <vector>
  2. #include <algorithm>
  3. #include <map>
  4. #include <set>
  5. #include <iostream>
  6. #include <string>
  7. using namespace std;
  8. using ll = long long;
  9.  
  10. void change(int col, int raw, vector <vector<int>> &desk, vector <int> &boys, int stepper) {
  11.     //cout << "raw = " << raw << "  col = " << col << '\n';
  12.     raw = desk.size() - raw - 1;
  13.     //cout << "raw = " << raw << "  col = " << col << '\n';
  14.     int yes = stepper; //чей ход
  15.     int no = (stepper + 1) % 2;//кто не ходит
  16.     if (desk[raw][col] == no) boys[no]--;
  17.     desk[raw][col] = yes;
  18.     boys[yes]++;
  19.     //вверх
  20.     bool up = false;
  21.     int upper = -9;
  22.     for (int i = raw - 1; i >= 0; --i) {
  23.         if (desk[i][col] == yes) {
  24.             up = true;
  25.             upper = i;
  26.             break;
  27.         }
  28.     }
  29.     if (up) {
  30.         for (int i = raw - 1; i > upper; --i) {
  31.             if (desk[i][col] == no) boys[no]--;
  32.             desk[i][col] = yes;
  33.             boys[yes]++;
  34.         }
  35.     }
  36.     //вниз
  37.     bool down = false;
  38.     int downer = -9;
  39.     for (int i = raw + 1; i < (int)desk.size(); ++i) {
  40.         if (desk[i][col] == yes) {
  41.             down = true;
  42.             downer = i;
  43.             break;
  44.         }
  45.     }
  46.     if (down) {
  47.         for (int i = raw + 1; i < downer; ++i) {
  48.             if (desk[i][col] == no) boys[no]--;
  49.             desk[i][col] = yes;
  50.             boys[yes]++;
  51.         }
  52.     }
  53.     //влево
  54.     bool left = false;
  55.     int lefter = -9;
  56.     for (int j = col - 1; j >= 0; --j) {
  57.         if (desk[raw][j] == yes) {
  58.             left = true;
  59.             lefter = j;
  60.             break;
  61.         }
  62.     }
  63.     if (left) {
  64.         for (int j = col - 1; j > lefter; --j) {
  65.             if (desk[raw][j] == no) boys[no]--;
  66.             desk[raw][j] = yes;
  67.             boys[yes]++;
  68.         }
  69.     }
  70.     //вправо
  71.     bool right = false;
  72.     int righter = -9;
  73.     for (int j = col + 1; j < (int)desk[0].size(); ++j) {
  74.         if (desk[raw][j] == yes) {
  75.             right = true;
  76.             righter = j;
  77.             break;
  78.         }
  79.     }
  80.     if (right) {
  81.         for (int j = col + 1; j < righter; ++j) {
  82.             if (desk[raw][j] == no) boys[no]--;
  83.             desk[raw][j] = yes;
  84.             boys[yes]++;
  85.         }
  86.     }
  87. }
  88.  
  89. int main()
  90. {
  91.     ios_base::sync_with_stdio(false);
  92.     cin.tie(0);
  93.     int N, M;//N--размер по горизонтали, M-по вертикали
  94.     cin >> N >> M;
  95.     vector <vector<int>> desk(M, vector <int> (N, -9));
  96.     vector <int> boys(2, 0);
  97.     int stepper = -1;
  98.     while (true) {
  99.         int x, y;
  100.         cin >> x >> y;
  101.         stepper = (stepper + 1) % 2;
  102.         if (x == -1 && y == -1) {
  103.             //exit(0);
  104.             break;
  105.         }
  106.         x--;
  107.         y--;
  108.         change(x, y, desk, boys, stepper);
  109.         int dif = boys[0] - boys[1];
  110.         cout << dif << endl;
  111.         /*cout << "dif = " << dif << '\n';
  112.         cout<<"desk\n";
  113.         for (auto x : desk) {
  114.             for (auto y : x) {
  115.                 cout << y << ' ';
  116.             }cout << '\n';
  117.         }cout << '\n';*/
  118.     }
  119. }
  120. //в конце разобраться с flush
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement