Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include "Anna.h"
- #include <bits/stdc++.h>
- using namespace std;
- void Anna(int n, int k, vector<int> ys, vector<int> xs) {
- vector<pair<int, int>> dirs = {{-1, -1}, {-1, 0}, {-1, 1}, {0, -1}, {0, 0}, {0, 1}, {1, -1}, {1, 0}, {1, 1}};
- vector<bool> uses(9, 0);
- for (int j = 0; j < k; ++j) {
- int x = j % 3;
- int y = j / 3;
- int dy = (ys[j] + 3 - y + 1) % 3;
- int dx = (xs[j] + 3 - x + 1) % 3;
- uses[3*dy + dx] = 1;
- }
- int unused = 0;
- while(uses[unused]) ++unused;
- for (int y = 0; y < n; ++y) {
- for (int x = 0; x < n; ++x) {
- int ind = 3 * (y % 3) + (x % 3);
- if (ind == 8) {
- SetFlag(y, x, 1); // Calibration flag
- } else if (ind == 7) {
- SetFlag(y, x, 2 + unused); // Unused flag
- } else if (ind < k) {
- if (ys[ind] < y - 1) SetFlag(y, x, 2);
- else if (ys[ind] > y + 1) SetFlag(y, x, 3);
- else if (xs[ind] < x - 1) SetFlag(y, x, 4);
- else if (xs[ind] > x + 1) SetFlag(y, x, 5);
- else {
- for (int j = 0; j < 9; ++j) {
- if (ys[ind] == y + dirs[j].first && xs[ind] == x + dirs[j].second) {
- SetFlag(y, x, 6 + j - (bool)(j >= unused));
- }
- }
- }
- } else {
- SetFlag(y, x, 2); // only happens if k < 7
- }
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement