Skip to content

Commit ae623a0

Browse files
committed
Добавлена задача №166.
1 parent 3f3b5ad commit ae623a0

File tree

3 files changed

+121
-0
lines changed

3 files changed

+121
-0
lines changed

README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -277,6 +277,7 @@
277277
<li><a href="https://github.com/allicen/Java-10000/tree/master/shift_text" target="_blank">Сдвиг текста</a> (31%)</li>
278278
<li><a href="https://github.com/allicen/Java-10000/tree/master/usm_dialogs" target="_blank">Диалоги по UCM</a> (31%)</li>
279279
<li><a href="https://github.com/allicen/Java-10000/tree/master/cryptogram" target="_blank">Криптограмма</a> (31%)</li>
280+
<li><a href="https://github.com/allicen/Java-10000/tree/master/community_of_robots" target="_blank">Сообщество роботов</a> (31%)</li>
280281
<li><a href="https://github.com/allicen/Java-10000/tree/master/n_digit_numbers" target="_blank">N-значные числа</a> (32%)</li>
281282
<li><a href="https://github.com/allicen/Java-10000/tree/master/ping" target="_blank">Обмен пакетами</a> (32%)</li>
282283
<li><a href="https://github.com/allicen/Java-10000/tree/master/wedding" target="_blank">Свадьба</a> (32%)</li>
Lines changed: 81 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,81 @@
1+
package community_of_robots;
2+
3+
import java.io.FileReader;
4+
import java.io.IOException;
5+
import java.io.PrintWriter;
6+
import java.util.ArrayDeque;
7+
import java.util.Scanner;
8+
9+
public class CommunityOfRobots {
10+
private static final int ROBOT_COUNT_FOR_GROUP_THREE = 5;
11+
private static final int ROBOT_COUNT_FOR_GROUP_FIVE = 9;
12+
13+
private static long _robotMaxCount(long robotCountStart) {
14+
long fiveGroup = robotCountStart / 5;
15+
long threeGroup = (robotCountStart - (fiveGroup * 5)) / 3;
16+
long result = threeGroup * ROBOT_COUNT_FOR_GROUP_THREE + fiveGroup * ROBOT_COUNT_FOR_GROUP_FIVE;
17+
18+
// максимальное количество групп по 5
19+
while (true) {
20+
boolean threePow = (robotCountStart - fiveGroup * 5 ) % 3 == 0;
21+
if (threePow) { // если есть группы по 5 и по 3
22+
threeGroup = (robotCountStart - fiveGroup * 5) / 3;
23+
24+
long resultTmp = threeGroup * ROBOT_COUNT_FOR_GROUP_THREE + fiveGroup * ROBOT_COUNT_FOR_GROUP_FIVE;
25+
26+
if (result < resultTmp) {
27+
result = resultTmp;
28+
}
29+
30+
break;
31+
} else {
32+
fiveGroup -= 1;
33+
}
34+
35+
if (fiveGroup < 0) {
36+
break;
37+
}
38+
}
39+
40+
threeGroup = robotCountStart / 3;
41+
42+
// максимальное количество групп по 3
43+
long resultTmp = threeGroup * ROBOT_COUNT_FOR_GROUP_THREE;
44+
if (result < resultTmp) {
45+
result = resultTmp;
46+
}
47+
48+
return result;
49+
}
50+
51+
52+
public static void main(String[] args) throws IOException {
53+
String[] data = new Scanner(new FileReader("input.txt")).nextLine().split(" ");
54+
long k = Long.parseLong(data[0]);
55+
int n = Integer.parseInt(data[1]);
56+
57+
long robotCount = k;
58+
59+
ArrayDeque<Long> process = new ArrayDeque<>();
60+
process.addLast(k);
61+
for (int i = 1; i <= n; i++) {
62+
// удаление роботов с 3го года
63+
if (i > 3) {
64+
robotCount -= process.removeFirst();
65+
}
66+
67+
// последний год
68+
if (i == n) {
69+
break;
70+
}
71+
72+
long count = _robotMaxCount(robotCount);
73+
robotCount += count;
74+
process.addLast(count);
75+
}
76+
77+
PrintWriter out = new PrintWriter(System.out);
78+
out.println(robotCount);
79+
out.flush();
80+
}
81+
}

community_of_robots/README.md

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
<h1 class="title">Сообщество роботов (31%)</h1>
2+
<p><a href="https://acmp.ru/index.asp?main=task&id_task=166">Ссылка на задачу</a></p>
3+
<p><b>Время: 1 сек.<br>Память: 16 Мб<br>Сложность: 31%</b></p>
4+
<p>Сообщество роботов живет по следующим законам:</p>
5+
<ul>
6+
<li>один раз в начале года они объединяются в группы по три или пять роботов;</li>
7+
<li>за год группа из трех роботов собирает 5 новых, а группа из 5 роботов – 9 новых;</li>
8+
<li>роботы объединяются так, чтобы собрать за год наибольшее количество новых роботов;</li>
9+
<li>каждый робот живет ровно три года после сборки.</li>
10+
</ul>
11+
<p>В начале первого года было K роботов и все они были только что собраны.</p>
12+
<p>Требуется написать программу, которая найдет количество роботов в начале N-го года.</p>
13+
<h2>Формат ввода</h2>
14+
<p class=text>
15+
Входной файл INPUT.TXT содержит записанные через пробел числа K (1 ≤ K ≤ 500) и N (1 ≤ N ≤ 100).
16+
</p>
17+
<h2>Формат вывода</h2>
18+
<p class=text>
19+
Выходной файл OUTPUT.TXT должен содержать одно число - количество роботов в начале N-го года. Количество роботов меньше, чем 2<sup>31</sup>.
20+
</p>
21+
<h3>Примеры</h3>
22+
<table class="sample-tests">
23+
<thead>
24+
<tr>
25+
<th>Ввод</th>
26+
<th>Вывод</th>
27+
</tr>
28+
</thead>
29+
<tbody>
30+
<tr>
31+
<td>3 2</td>
32+
<td>8</td>
33+
</tr>
34+
<tr>
35+
<td>8 2</td>
36+
<td>22</td>
37+
</tr>
38+
</tbody>
39+
</table>

0 commit comments

Comments
 (0)