Skip to content

Commit 6177e67

Browse files
committed
add task 5
1 parent 90a7633 commit 6177e67

File tree

3 files changed

+101
-1
lines changed

3 files changed

+101
-1
lines changed

README.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
* [`1005` Куча камней](task_2_1005)
66
* [`1155` Дуоны](task_3_1155)
77
* [`1296` Гиперпереход](task_4_1296)
8-
* [`1401`](task_5_1401)
8+
* [`1401` Игроки](task_5_1401)
99
* [`1207` Медиана на плоскости](task_6_1207)
1010
* [`1322` Шпион](task_7_1322)
1111
* [`1444`](task_8_1444)

task_5_1401/1401.cpp

+77
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,77 @@
1+
#include <iostream>
2+
#include <cmath>
3+
4+
using namespace std;
5+
int table[512][512];
6+
7+
void paint(int x, int y, int i, int j, int n) {
8+
static int c;
9+
++c;
10+
n = n / 2;
11+
if ((x - j) >= n && (y - i) >= n) {
12+
table[i + n - 1][j + n - 1] = c;
13+
table[i + n][j + n - 1] = c;
14+
table[i + n - 1][j + n] = c;
15+
if (n>1){
16+
paint(j + n - 1, i + n - 1, i, j, n);
17+
paint(j + n, i + n - 1, i, j + n, n);
18+
paint(x, y, i + n, j + n, n);
19+
paint(j + n - 1, i + n, i + n, j, n);
20+
}
21+
} else if ((x - j) >= n && (y - i) < n) {
22+
table[i + n - 1][j + n - 1] = c;
23+
table[i + n][j + n - 1] = c;
24+
table[i + n][j + n] = c;
25+
if (n>1){
26+
paint(j + n - 1, i + n - 1, i, j, n);
27+
paint(x, y, i, j + n, n);
28+
paint(j + n, i + n, i + n, j + n, n);
29+
paint(j + n - 1, i + n, i + n, j, n);
30+
}
31+
} else if ((x - j) < n && (y - i) < n) {
32+
table[i + n - 1][j + n] = c;
33+
table[i + n][j + n - 1] = c;
34+
table[i + n][j + n] = c;
35+
if (n>1){
36+
paint(x, y, i, j, n);
37+
paint(j + n, i + n - 1, i, j + n, n);
38+
paint(j + n, i + n, i + n, j + n, n);
39+
paint(j + n - 1, i + n, i + n, j, n);
40+
}
41+
} else if ((x - j) < n && (y - i) >= n) {
42+
table[i + n - 1][j + n - 1] = c;
43+
table[i + n][j + n] = c;
44+
table[i + n - 1][j + n] = c;
45+
if (n>1){
46+
paint(j + n - 1, i + n - 1, i, j, n);
47+
paint(j + n, i + n - 1, i, j + n, n);
48+
paint(j + n, i + n, i + n, j + n, n);
49+
paint(x, y, i + n, j, n);
50+
}
51+
}
52+
return;
53+
}
54+
55+
int main() {
56+
int n, x, y;
57+
cin >> n >> y >> x;
58+
n = 1 << n;
59+
if ((int) (pow(n, 2) - 1) % 3 != 0) {
60+
cout << -1;
61+
return 0;
62+
}
63+
64+
65+
--x;
66+
--y;
67+
paint(x, y, 0, 0, n);
68+
69+
for (int i = 0; i < n; ++i) {
70+
for (int j = 0; j < n; ++j)
71+
cout << table[i][j] << " ";
72+
cout << endl;
73+
}
74+
return 0;
75+
}
76+
77+

task_5_1401/README.md

+23
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
# Задача 5 (1401. Игроки)
2+
3+
## Условие
4+
5+
Известно, что господин Чичиков зарабатывал свой капитал и таким способом: он спорил со всякими недотёпами, что сможет доказать, что квадратную доску размера 512 × 512 нельзя замостить следующими фигурами:
6+
7+
X XX X XX
8+
XX X XX X
9+
и всегда выигрывал. Однако один из недотёп оказался не так уж глуп, и сказал, что сможет замостить такими фигурами доску размера 512 × 512 без правой верхней клетки. Чичиков, не подумав, ляпнул, что он вообще может любую доску размера 2<sup>n</sup> × 2<sup>n</sup> без одной произвольной клетки замостить такими фигурами. Слово за слово, они поспорили. Чичиков чувствует, что сам он не докажет свою правоту. Помогите же ему!
10+
11+
Ограничение времени: 3.0 секунды
12+
Ограничение памяти: 64 МБ
13+
14+
## Исходные данные
15+
16+
В первой строке записано целое число n (1 ≤ n ≤ 9). Во второй строке через пробел даны два целых числа x, y: координаты «выколотой» клетки доски (1 ≤ x, y ≤ 2<sup>n</sup>), x — номер строки, y — номер столбца. Левый верхний угол доски имеет координаты (1, 1).
17+
## Результат
18+
Ваша программа должна выдать 2<sup>n</sup> строчек по 2<sup>n</sup> чисел в каждой строке. На месте выбитой клетки должно стоять число 0. На месте остальных клеток должны стоять числа от 1 до (2<sup>2n</sup> − 1) / 3 — номер фигуры, закрывающей данную клетку. Разумеется, одинаковые номера должны образовывать фигуры. Если же такую доску нельзя покрыть фигурами, выведите «−1».
19+
20+
## Примеры
21+
| Исходные данные | Результат |
22+
|---|---|
23+
| 2 <br> 1 1 <br> | 0 1 3 3<br> 1 1 4 3<br> 2 4 4 5<br> 2 2 5 5 |

0 commit comments

Comments
 (0)