egogoboy

Ферзь, ладья и конь

Jun 22nd, 2022 (edited)
46
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.32 KB | None | 0 0
  1. #include <iostream>
  2. #include <fstream>
  3. #include <vector>;
  4. using namespace std;
  5.  
  6. int vertical(int& j, vector<vector<bool>>& m) {
  7.  
  8.     int answ = 0;
  9.  
  10.     for (int i = 0; i < 8; i++) {
  11.         if (!m[i][j]) {
  12.             m[i][j] = true;
  13.             answ++;
  14.         }
  15.     }
  16.  
  17.     return answ;
  18.  
  19. }
  20. int gorizontal(int& j, vector<vector<bool>>& m) {
  21.  
  22.     int answ = 0;
  23.  
  24.     for (int i = 0; i < 8; i++) {
  25.         if (!m[j][i]) {
  26.             m[j][i] = true;
  27.             answ++;
  28.         }
  29.     }
  30.  
  31.     return answ;
  32.  
  33. }
  34.  
  35. int diagonal(int qi, int qj, vector<vector<bool>>& m) {
  36.  
  37.     int j, i, answ = 0, temp = 1;;
  38.     vector <int> napr = {1, 1, -1, -1};
  39.  
  40.     for (int k = 0; k < 4; k++) {
  41.         i = qi, j = qj;
  42.         while (i < 8 && i > -1 && j < 8 && j > -1) {
  43.             if (!m[i][j]) {
  44.                 m[i][j] = true;
  45.                 answ++;
  46.             }
  47.             j += napr[k];
  48.             i += temp;
  49.         }
  50.         temp *= -1;
  51.     }
  52.  
  53.     return answ;
  54.  
  55. }
  56.  
  57. int main() {
  58.  
  59.     std::ifstream fin("input.txt");
  60.     std::ofstream fout("output.txt");
  61.  
  62.     string queen, castle, knight;
  63.     fin >> queen >> castle >> knight;
  64.  
  65.     int answ = 0;
  66.  
  67.     vector<vector<bool>> m(8, vector<bool>(8, false));
  68.  
  69.     m[queen[1] - '1'][queen[0] - 'A'] = true;
  70.     m[castle[1] - '1'][castle[0] - 'A'] = true;
  71.     m[knight[1] - '1'][knight[0] - 'A'] = true;
  72.  
  73.     int j = queen[1] - '1';
  74.     answ += gorizontal(j, m);
  75.     j = castle[1] - '1';
  76.     answ += gorizontal(j, m);
  77.     j = queen[0] - 'A';
  78.     answ += vertical(j, m);
  79.     j = castle[0] - 'A';
  80.     answ += vertical(j, m);
  81.  
  82.     j = queen[0] - 'A';
  83.     int i = queen[1] - '1';
  84.     answ += diagonal(i, j, m);
  85.  
  86.     vector <int> ki = {1, 1, -1, -1, 2, 2, -2, -2};
  87.     vector <int> kj = {2, -2, 2, -2, 1, -1, 1, -1};
  88.  
  89.     i = knight[1] - '1', j = knight[0] - 'A';
  90.    
  91.     for (int k = 0; k < ki.size(); k++) {
  92.         int curi = i + ki[k], curj = j + kj[k];
  93.         if (curi < 8 && curi > -1 && curj > -1 && curj < 8) {
  94.             if (!m[curi][curj]) {
  95.                 m[curi][curj] = true;
  96.                 answ++;
  97.             }
  98.         }
  99.     }
  100.    
  101.     fout << answ << endl;
  102.  
  103.     /*for (int i = 0; i < 8; i++) {
  104.         for (int j = 0; j < 8; j++) {
  105.             fout << m[i][j] << " ";
  106.         }
  107.         fout << endl;
  108.     }*/
  109.     return 0;
  110.  
  111. }
Advertisement
Add Comment
Please, Sign In to add comment