Advertisement
Korotkodul

ИТМО_21-22_N8_OK_1h

Oct 22nd, 2022 (edited)
1,152
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.24 KB | None | 0 0
  1. #include <iostream>
  2. #include <cmath>
  3. #include <vector>
  4. #include <queue>
  5. #include <algorithm>
  6. #include <string>
  7. #include <stack>
  8. #include <set>
  9. #include <map>
  10. #define pii pair <int, int>
  11. #define pb(x) push_back(x)
  12. using namespace std;
  13. using ll = long long;
  14. using ld = long double;
  15. using db = double;
  16. void cv(vector <int> &v) {
  17.     for (auto x : v) cout << x << ' ';
  18.     cout << "\n";
  19. }
  20.  
  21. void cvl(vector <ll> &v) {
  22.     for (auto x : v) cout << x << ' ';
  23.     cout << "\n";
  24. }
  25.  
  26.  
  27. void cvv(vector <vector <int> > &v) {
  28.     for (auto x : v) cv(x);
  29.     cout << "\n";
  30. }
  31.  
  32. void cvb(vector <bool> v) {
  33.     for (bool x : v) cout << x << ' ';
  34.     cout << "\n";
  35. }
  36.  
  37. void cvs(vector <string>  v) {
  38.     for (auto a : v) {
  39.         cout << a << "\n";
  40.     }
  41. }
  42.  
  43. void cvp(vector <pii> a) {
  44.     for (auto p : a) {
  45.         cout << p.first << ' ' << p.second << "\n";
  46.     }
  47.     cout << "\n";
  48. }
  49.  
  50. vector <vector <int> > dsk(8, vector <int> (8, 0));
  51.  
  52. vector <int> dx = {1, 0, -1, 0}, dy = {0, 1, 0, -1};
  53.  
  54. bool ok(int i, int j) {
  55.     return i >= 0 && i < 8 && j >= 0 && j < 8 && dsk[i][j] == 0;
  56. }
  57. int ans = 0;
  58.  
  59. bool sh = 0;
  60.  
  61. vector <pii> gd;
  62.  
  63. void wrk(int x, int y) {
  64.     if (sh) {
  65.         cout << "x y = " << x << ' ' << y << "\n";
  66.     }
  67.  
  68.     int i = x, j = y;
  69.     if (sh) {
  70.         cout << "x y = " << x << ' ' << y << "\n";
  71.         cout << "start i j = " << i << ' ' << j << "\n";
  72.         cout << "dsk\n";
  73.         cvv(dsk);
  74.     }
  75.     //int id = -1;
  76.     bool can = 1;
  77.     pii start = {i, j};
  78.     int cnt = 9;
  79.     while (can) {
  80.         if (sh) {
  81.             cout << "i j = " << i << ' ' << j << "\n";
  82.         }
  83.         can = 0;
  84.         for (int id = 0; id < 4; ++id) {
  85.             if (ok(i + dx[id], j + dy[id])) {
  86.                 i += dx[id];
  87.                 j += dy[id];
  88.                 can = 1;
  89.                 dsk[i][j] = 1;
  90.                 cnt++;
  91.                 break;
  92.             }
  93.         }
  94.         //can = 0;
  95.     }
  96.     if (cnt == 64) {
  97.         ans++;
  98.         gd.push_back(start);
  99.     }
  100.     if (sh) {
  101.         cout << "cnt = " << cnt << "\n";
  102.         cout << "dsk\n";
  103.         cvv(dsk);
  104.     }
  105. }
  106.  
  107. int main() {
  108.     /*ios::sync_with_stdio(0);
  109.     cin.tie(0);
  110.     cout.tie(0);*/
  111.  
  112.     for (int i =0; i < 8; ++i) {
  113.         for (int j = 0; j < 8; ++j) {
  114.             if (sh) {
  115.                 cout << "GO i j = " << i << ' ' << j << "\n";
  116.             }
  117.  
  118.             dsk.assign(8, vector <int> (8, 0));
  119.             for (int i = 1; i <= 4; ++i) {
  120.                 dsk[i][1] = 1;
  121.             }
  122.             for (int i = 3; i <= 6; ++i) {
  123.                 dsk[i][6] = 1;
  124.             }
  125.  
  126.             if (dsk[i][j] == 0) {
  127.                 dsk[i][j] = 1;
  128.                 wrk(i, j);
  129.             }
  130.         }
  131.     }
  132.     cout << "ans = " << ans << "\n";
  133.     cout << "good start = \n";
  134.     cvp(gd);
  135.     sh = 1;
  136.     for (pii p: gd) {
  137.         dsk.assign(8, vector <int> (8, 0));
  138.         for (int i = 1; i <= 4; ++i) {
  139.             dsk[i][1] = 1;
  140.         }
  141.         for (int i = 3; i <= 6; ++i) {
  142.             dsk[i][6] = 1;
  143.         }
  144.         if (sh) {
  145.             cout << "GO i j = " << p.first << ' ' << p.second << "\n";
  146.             cout <<"dsk\n";
  147.             cvv(dsk);
  148.         }
  149.         wrk(p.first, p.second);
  150.     }
  151.  
  152. }
  153.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement