Skip to content

Commit 0c3adfa

Browse files
1628
1 parent 743052e commit 0c3adfa

File tree

2 files changed

+108
-1
lines changed

2 files changed

+108
-1
lines changed

1628.cpp

+104
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,104 @@
1+
#include <iostream>
2+
#include <bits/stdc++.h>
3+
4+
/**
5+
* Отсортируем все точки с левого верхнего угла по правый нижний: сначала строки, потом столбцы.
6+
* Каждую полосу, длиной больше 1 добавим в результат, каждую полосу, длиной 1 сохраним на будущее в вектор sq.
7+
*
8+
* Аналогично отсортируем все точки снова, только теперь сначала столбцы, потом строки.
9+
*
10+
* Теперь у нас есть количество вертикальных и горизонтальных полос. Осталось проверить только полосы 1х1.
11+
* Если полоса 1х1 встречается в векторе sq 2 раза, значит - квадрат 1х1 максимальен и по вертикали и по горизонтали
12+
* => его следует добавить в результат
13+
*/
14+
15+
bool comp1(std::pair<int, int> a, std::pair<int, int> b) {
16+
if (a.first != b.first) {
17+
return a.first < b.first;
18+
} else {
19+
return a.second < b.second;
20+
}
21+
}
22+
23+
bool comp2(std::pair<int, int> a, std::pair<int, int> b) {
24+
if (a.second != b.second) {
25+
return a.second < b.second;
26+
} else {
27+
return a.first < b.first;
28+
}
29+
}
30+
31+
int main() {
32+
int m, n, k, res = 0;
33+
34+
std::cin >> m >> n >> k;
35+
36+
std::vector<std::pair<int, int>> point;
37+
std::vector<std::pair<int, int>> sq;
38+
39+
for (int i = 0; i < k; ++i) {
40+
std::pair<int, int> p;
41+
std::cin >> p.first >> p.second;
42+
p.first--;
43+
p.second--;
44+
point.push_back(p);
45+
}
46+
47+
for (int i = 0; i < m; ++i) {
48+
std::pair<int, int> p = {i, -1};
49+
std::pair<int, int> p2 = {i, n};
50+
point.push_back(p2);
51+
point.push_back(p);
52+
}
53+
54+
for (int i = 0; i < n; ++i) {
55+
std::pair<int, int> p = {-1, i};
56+
std::pair<int, int> p2 = {m, i};
57+
point.push_back(p2);
58+
point.push_back(p);
59+
}
60+
61+
sort(point.begin(), point.end(), comp1);
62+
63+
for (int i = 0; i < point.size() - 1; ++i) {
64+
if (point[i].first == point[i + 1].first) {
65+
if (point[i + 1].second - point[i].second - 1 > 1) {
66+
res++;
67+
} else if (point[i + 1].second - point[i].second - 1 == 1) {
68+
std::pair<int, int> p(point[i].first, point[i].second + 1);
69+
sq.push_back(p);
70+
}
71+
}
72+
}
73+
74+
sort(point.begin(), point.end(), comp2);
75+
sort(sq.begin(), sq.end(), comp2);
76+
77+
for (int i = 0; i < point.size() - 1; ++i) {
78+
if (point[i].second == point[i + 1].second) {
79+
if (point[i + 1].first - point[i].first - 1 > 1) {
80+
res++;
81+
} else if (point[i + 1].first - point[i].first - 1 == 1) {
82+
std::pair<int, int> p(point[i].first + 1, point[i].second);
83+
sq.push_back(p);
84+
}
85+
}
86+
}
87+
88+
sort(sq.begin(), sq.end(), comp1);
89+
90+
if (sq.size() > 1) {
91+
int i = 0;
92+
while (i < sq.size() - 1) {
93+
if (sq[i] == sq[i + 1]) {
94+
res++;
95+
i++;
96+
}
97+
i++;
98+
}
99+
}
100+
101+
std::cout << "\n\n" << res;
102+
103+
return 0;
104+
}

CMakeLists.txt

+4-1
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@ project(algos)
33

44
set(CMAKE_CXX_STANDARD 14)
55

6+
include_directories(SYSTEM ./lib)
7+
68
add_executable(algos_1 2025.cpp)
79
add_executable(algos_2 1005.cpp)
810
add_executable(algos_3 1155.cpp)
@@ -15,4 +17,5 @@ add_executable(algos_9 1726.cpp)
1517
add_executable(algos_10 1322.cpp)
1618
add_executable(algos_11 1494.cpp)
1719
add_executable(algos_12 1521.cpp)
18-
add_executable(algos_13 1067.cpp)
20+
add_executable(algos_13 1067.cpp)
21+
add_executable(algos_14 1628.cpp)

0 commit comments

Comments
 (0)