Advertisement
Guest User

Anna.cpp

a guest
Mar 23rd, 2021
345
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.20 KB | None | 0 0
  1. #include "Anna.h"
  2. #include <bits/stdc++.h>
  3. using namespace std;
  4.  
  5. void Anna(int n, int k, vector<int> ys, vector<int> xs) {
  6.     vector<pair<int, int>> dirs = {{-1, -1}, {-1, 0}, {-1, 1}, {0, -1}, {0, 0}, {0, 1}, {1, -1}, {1, 0}, {1, 1}};
  7.    
  8.     vector<bool> uses(9, 0);
  9.     for (int j = 0; j < k; ++j) {
  10.         int x = j % 3;
  11.         int y = j / 3;
  12.         int dy = (ys[j] + 3 - y + 1) % 3;
  13.         int dx = (xs[j] + 3 - x + 1) % 3;
  14.         uses[3*dy + dx] = 1;
  15.     }
  16.     int unused = 0;
  17.     while(uses[unused]) ++unused;
  18.  
  19.     for (int y = 0; y < n; ++y) {
  20.         for (int x = 0; x < n; ++x) {
  21.             int ind = 3 * (y % 3) + (x % 3);
  22.             if (ind == 8) {
  23.                 SetFlag(y, x, 1); // Calibration flag
  24.             } else if (ind == 7) {
  25.                 SetFlag(y, x, 2 + unused); // Unused flag
  26.             } else if (ind < k) {
  27.                 if (ys[ind] < y - 1) SetFlag(y, x, 2);
  28.                 else if (ys[ind] > y + 1) SetFlag(y, x, 3);
  29.                 else if (xs[ind] < x - 1) SetFlag(y, x, 4);
  30.                 else if (xs[ind] > x + 1) SetFlag(y, x, 5);
  31.                 else {
  32.                     for (int j = 0; j < 9; ++j) {
  33.                         if (ys[ind] == y + dirs[j].first && xs[ind] == x + dirs[j].second) {
  34.                             SetFlag(y, x, 6 + j - (bool)(j >= unused));
  35.                         }
  36.                     }
  37.                 }
  38.             } else {
  39.                 SetFlag(y, x, 2); // only happens if k < 7
  40.             }
  41.         }
  42.     }
  43. }
  44.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement