Вы находитесь на странице: 1из 2

Подготовка к областной олимпиаде

Марафон - 2022

Задача A. Числа в ряд


Ограничение по времени: 0.2 секунды
Ограничение по памяти: 64 мегабайта
Числа от 1 до 𝑁 выписали в ряд. Можно ли, поставив перед каждым числом знак «+» или «−», добиться
того, чтобы сумма получившихся чисел была равна нулю?
Формат входных данных
Программа получает на вход натуральное число 𝑁 , не превосходящее 105 .
Формат выходных данных
Программа должна вывести последовательность из 𝑁 символов «+» или «−», соответствующих знакам,
которые нужно расставить перед числами от 1 до 𝑁 так, чтобы сумма получившихся чисел была равна 0.
Если задача имеет несколько решений, нужно вывести один (любой) ответ. Если задача не имеет решения
для данного N, нужно вывести одно слово IMPOSSIBLE.
Примеры
тест ответ
3 −−+
2 IMPOSSIBLE

Страница 1 из 25
Подготовка к областной олимпиаде
Марафон - 2022

Разбор задачи «Числа в ряд»


Решение.
К идее решения задачи можно прийти, если попробовать построить ответы для маленьких значений 𝑁 .
При 𝑁 = 1 и 𝑁 = 2 задача не имеет решения, при 𝑁 = 3 и при 𝑁 = 4 есть решения («+ + −» и «+ − −+»).
Далее заметим, что для любых 4 подряд идущих чисел (не только для чисел 1, 2, 3, 4) можно расставить
знаки требуемым образом: «+ − −+». Поэтому если 𝑁 делится на 4, то ответом будет строка «+ − −+»,
повторённая 𝑁/4 раза. Если 𝑁 даёт остаток 3 при делении на 4, то ответ можно получить, записав сначала
строку «+ + −», а затем повторив строку «+ − −+» нужное число раз.
Если 𝑁 даёт остаток 1 или 2 при делении на 4, то задача не имеет решения. Для доказательство можно
заметить, что в этом случае сумма чисел от 1 до 𝑁 будет нечётной, а замена знака одного слагаемого не
меняет чётность суммы, поэтому при любой расстановке знаков сумма будет нечётной.
В решении необходимо разобрать случаи различного остатка от деления 𝑁 на 4 и для каждого случая
вывести свой вариант ответа.

Пример решения на Python3


1 n = int ( input () )
2 if n % 4 == 1 or n % 4 == 2:
3 print ( " IMPOSSIBLE " )
4 elif n % 4 == 3:
5 print ( " ++ - " + " + - -+ " * ( n // 4) )
6 else :
7 print ( " + - -+ " * ( n // 4) )

Пример решения на Pascal


1 { $H + }
2 var
3 n , i : LongInt ;
4 ans : String ;
5 begin
6 Read ( n ) ;
7 ans := ’ ’;
8 if ( n mod 4 = 1) or ( n mod 4 = 2) then
9 ans := ’ IMPOSSIBLE ’;
10 if ( n mod 4 = 3) then
11 begin
12 ans := ’++ - ’;
13 for i := 1 to n div 4 do ans := ans + ’+ - -+ ’;
14 end ;
15 if ( n mod 4 = 0) then
16 begin
17 for i := 1 to n div 4 do ans := ans + ’+ - -+ ’;
18 end ;
19 WriteLn ( ans ) ;
20 end .

Обратите внимание на директиву компилятора $H+.

Страница 2 из 25

Вам также может понравиться