int main() { int n; scanf("%d", &n); bool a[n][n]; memset(a, true, sizeof(a)); int m; scanf("%d", &m); for (int k = 0; k < m; ++k) { int x, y, aa; scanf("%d%d%d", &x, &y, &aa); for (int i = x; i < min(x + aa, n + 1); ++i) { for (int j = y; j < min(y + aa, n + 1); ++j) { a[i][j] = false; } } } int cnt = 0; for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) { if (a[i][j]) { cnt++; } } } printf("%d", cnt); return 0; }
Координаты даны в двоичной системе счисления, поэтому переводим их в десятичную.
Потом сортируем по порядку по номерам точек.
И отмечаем точки на графике, соединяя соседние отрезком.
Я все эти преобразования сделал в таблице Эксель.
Саму таблицу и картинку, полученную после нанесения всех точек смотри внизу.
А вот координаты точек, отсортированные и в десятичной системе:
№ x y
1 11 7
2 12 7
3 13 6
4 13 5
5 14 6
6 15 6
7 16 5
8 15 5
9 12 3
10 10 1
11 7 1
12 5 2
13 4 1
14 2 2
15 3 2
16 4 3
17 3 6
18 1 7
19 3 8
20 4 8
21 5 7
22 6 5
23 7 6
24 9 6
25 8 5
26 7 5
27 8 4
28 10 4
29 12 5
30 12 6
31 11 7
#include <string.h>
#include <algorithm>
using namespace std;
int main() {
int n;
scanf("%d", &n);
bool a[n][n];
memset(a, true, sizeof(a));
int m;
scanf("%d", &m);
for (int k = 0; k < m; ++k) {
int x, y, aa;
scanf("%d%d%d", &x, &y, &aa);
for (int i = x; i < min(x + aa, n + 1); ++i) {
for (int j = y; j < min(y + aa, n + 1); ++j) {
a[i][j] = false;
}
}
}
int cnt = 0;
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
if (a[i][j]) {
cnt++;
}
}
}
printf("%d", cnt);
return 0;
}