Skip to content

Commit 98010a7

Browse files
committed
add task 14
1 parent e72e19a commit 98010a7

File tree

4 files changed

+110
-2
lines changed

4 files changed

+110
-2
lines changed

README.md

+2-2
Original file line numberDiff line numberDiff line change
@@ -8,13 +8,13 @@
88
* [`1401` Игроки](task_5_1401)
99
* [`1207` Медиана на плоскости](task_6_1207)
1010
* [`1322` Шпион](task_7_1322)
11-
* [`1444`](task_8_1444)
11+
* [`1444` Накормить элефпотама](task_8_1444)
1212
* [`1604` В Стране Дураков](task_9_1604)
1313
* [`1726` Кто ходит в гости…](task_10_1726)
1414
* [`1067` Disk Tree](task_11_1067)
1515
* [`1494` Монобильярд](task_12_1494)
1616
* [`1521` Военные учения 2](task_13_1521)
17-
* [`1628`](task_14_1628)
17+
* [`1628` Белые полосы](task_14_1628)
1818
* [`1650`](task_15_1650)
1919
* [`1080` Раскраска карты](task_16_1080)
2020
* [`1450` Российские газопроводы](task_17_1450)

task_14_1628/1628.cpp

+64
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
1+
#include <algorithm>
2+
#include <iostream>
3+
#include <vector>
4+
#include <set>
5+
using namespace std;
6+
7+
bool compare_y(pair<int, int> a, pair<int, int> b) {
8+
if (a.second != b.second) return a.second<b.second;
9+
return a.first < b.first;
10+
}
11+
12+
bool compare_x(pair<int, int> a, pair<int, int> b) {
13+
if (a.first != b.first) return a.first<b.first;
14+
return a.second < b.second;
15+
}
16+
17+
int counter;
18+
int main() {
19+
int N, M, K;
20+
21+
cin >> N >> M >> K;
22+
vector<pair<int, int>> cell;
23+
set<pair<int, int> > S;
24+
int x, y;
25+
for (int i = 0; i < K; ++i) {
26+
cin >> x >> y;
27+
cell.push_back(make_pair(x, y));
28+
}
29+
30+
for (int i = 1; i <= M; i++) {
31+
cell.push_back(make_pair(0, i));
32+
cell.push_back(make_pair(N + 1, i));
33+
}
34+
35+
for (int i = 1; i <= N; i++) {
36+
cell.push_back(make_pair(i, 0));
37+
cell.push_back(make_pair(i, M + 1));
38+
}
39+
40+
K += (M + N) * 2;
41+
42+
sort(cell.begin(), cell.begin() + K, compare_y);
43+
for (int i = 0; i < K; i++) {
44+
int space = cell[i + 1].first - cell[i].first;
45+
if (space == 2) {
46+
if (S.find(make_pair(cell[i].first + 1, cell[i].second)) != S.end())
47+
counter ++;
48+
}
49+
else if (cell[i].second == cell[i + 1].second && space > 2)
50+
counter ++;
51+
}
52+
53+
sort(cell.begin(), cell.begin() + K, compare_x);
54+
for (int i = 0; i < K ; i++) {
55+
int space = cell[i + 1].second - cell[i].second;
56+
if (space == 2)
57+
S.insert(make_pair(cell[i].first, cell[i].second + 1));
58+
else if (cell[i].first == cell[i + 1].first && space > 2)
59+
counter ++;
60+
}
61+
62+
cout << counter << endl;
63+
return 0;
64+
}

task_14_1628/README.md

+23
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
# Задача 14 (1628. Белые полосы)
2+
3+
## Условие
4+
5+
У каждого неудачника в жизни бывают не только чёрные, но и белые полосы. Марсианин Вась-Вась отмечает в календаре, представляющем собой таблицу m × n, те дни, когда ему ужасно не повезло. Если Вась-Васю не повезло в j-й день i-й недели, то он закрашивает ячейку таблицы (i, j) в чёрный цвет. Все незакрашенные ячейки в таблице имеют белый цвет.
6+
Будем называть отрезками жизни прямоугольники размером 1 × l либо l × 1. Белыми полосами Вась-Вась считает все максимальные по включению белые отрезки таблицы. А сможете ли Вы определить, сколько всего белых полос было в жизни Вась-Вася?
7+
8+
Ограничение времени: 1.0 секунды
9+
Ограничение памяти: 64 МБ
10+
11+
12+
## Исходные данные
13+
14+
ВПервая строка содержит целые числа m, n, k — размеры календаря и количество неудачных дней в жизни Вась-Вася (1 ≤ m, n ≤ 30000; 0 ≤ k ≤ 60000). В следующих k строках перечислены неудачные дни в виде пар (x<sub>i</sub>, y<sub>i</sub>), где x<sub>i</sub> — номер недели, к которой относится неудачный день, а <sub>i</sub> — номер дня в этой неделе (1 ≤ x<sub>i</sub> ≤ m; 1 ≤ y<sub>i</sub> ≤ n). Описание каждого неудачного дня встречается только один раз.
15+
16+
## Результат
17+
Выведите число белых полос в жизни Вась-Вася.
18+
19+
## Примеры
20+
| Исходные данные | Результат |
21+
|---|---|
22+
|3 5 4<br>1 1<br>1 5<br>2 2<br>3 3|8|
23+
|5 1 2<br> 2 1 <br> 3 1 |2|

task_8_1444/README.md

+21
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
# Задача 8 (1444. Накормить элефпотама)
2+
3+
## Условие
4+
5+
Гарри Поттер сдаёт экзамен по предмету «Уход за магическими существами». Его задание — накормить карликового элефпотама. Гарри помнит, что элефпотамы отличаются прямолинейностью и невозмутимостью. Они настолько прямолинейны, что ходят строго по прямой, и настолько невозмутимы, что заставить их идти можно, только если привлечь его внимание к чему-нибудь действительно вкусному. И главное, наткнувшись на цепочку своих собственных следов, элефпотам впадает в ступор и отказывается идти куда-либо. По словам Хагрида, элефпотамы обычно возвращаются домой, идя в обратную сторону по своим собственным следам. Поэтому они никогда не пересекают их, иначе могут заблудиться. Увидев свои следы, элефпотам детально вспоминает все свои перемещения от выхода из дома (поэтому-то они и ходят только по прямой и лишний раз не меняют направление — так легче запоминать). По этой информации элефпотам вычисляет, в какой стороне расположена его нора, после чего поворачивается и идет прямо к ней. Эти вычисления занимают у элефпотама некоторое (довольно большое) время. А то, что некоторые невежды принимают за ступор, на самом деле есть проявление выдающихся вычислительных способностей этого чудесного, хотя и медленно соображающего животного!
6+
Любимое лакомство элефпотамов — слоновьи тыквы, именно они и растут на лужайке, где Гарри должен сдавать экзамен. Перед началом испытания Хагрид притащит животное к одной из тыкв. Скормив элефпотаму очередную тыкву, Гарри может направить его в сторону любой оставшейся тыквы. Чтобы сдать экзамен, надо провести элефпотама по лужайке так, чтобы тот съел как можно больше тыкв до того, как наткнется на свои следы.
7+
8+
Ограничение времени: 0.5 секунды
9+
Ограничение памяти: 64 МБ
10+
11+
## Исходные данные
12+
13+
В первой строке входа находится число N (3 ≤ N ≤ 30000) — количество тыкв на лужайке. Тыквы пронумерованы от 1 до N, причем номер один присвоен той тыкве, у которой будет стоять элефпотам в начале экзамена. В следующих N строках даны координаты всех тыкв по порядку. Все координаты — целые числа от −1000 до 1000. Известно, что положения всех тыкв различны, и не существует прямой, проходящей сразу через все тыквы.
14+
15+
## Результат
16+
В первой строке выхода вы должны вывести K — максимальное количество тыкв, которое может съесть элефпотам. Далее по одному числу в строке выведите K чисел — номера тыкв в порядке их обхода. Первым в этой последовательности всегда должно быть число 1.
17+
18+
## Примеры
19+
| Исходные данные | Результат |
20+
|---|---|
21+
| 4 <br> 0 0<br> 10 10 <br> 0 10 <br> 10 0 | 4 <br> 1 <br> 3 <br> 2 <br> 4 |

0 commit comments

Comments
 (0)