Програмування 2020-2021.

Задачі, які пропонувалися на дистанційній олімпіаді з програмування у 2020-2021 н. р.

У кого найвища оцінка?

Петрик, Марічка та Оленка отримали перші оцінки з інформатики. Вони придумали наступну задачу — у кого найвища оцінка, той перемагає.
Дану задачу вони дали Сергію. На жаль, Сергій зайнятий, тому допоможіть йому розв'язувати дану задачу.

Вхідні дані

Перший рядок містить три цілі числа , , () — оцінки Петрика, Марічки та Оленки відповідно.
Гарантується, що всі числа різні між собою.

Вихідні дані

Виведіть «Petryk», якщо у Петрика найвища оцінка серед усіх, «Marichka», якщо у Марічки найвища оцінка серед усіх, або виведіть «Olenka», якщо найвища оцінка в Оленки.
Ліміт часу 1 секунда
Ліміт використання пам'яті 256 MiB
Вхідні дані #1
8 10 12
Вихідні дані #1
Olenka
Вхідні дані #2
7 9 3
Вихідні дані #2
Marichka

Розв’язання: 

program ddd;
var p,m,o:integer;
begin
readln(p,m,o);
if (p>m)and(p>o) then writeln('Petryk') else
if (m>p)and(m>o) then writeln('Marichka')else writeln('Olenka');
end.

 2. А+Б=С?

Петрику нудно вирішувати простенькі задачки, де потрібно знаходити суму двох чисел, тому його викладачка програмування дала складнішу задачку, яка звучить наступним чином:
Вам дано три цілі числа , та . Вам потрібно встановити, чи існує серед них таке число, яке дорівнює сумі двох інших чисел.

Вхідні дані

Перший рядок містить три цілі числа , та ().

Вихідні дані

Виведіть «Yes», якщо таке число є, інакше виведіть «No» (без лапок).
Ліміт часу 1 секунда
Ліміт використання пам'яті 256 MiB
Вхідні дані #1
0 3 3
Вихідні дані #1
Yes
Вхідні дані #2
1 10 15
Вихідні дані #2
No
Вхідні дані #3
12 20 8
Вихідні дані #3
Yes

Розв’язання: 

program summa;
var
  a, b, c: integer;
begin
  readln(a, b, c);
  if (a + b = c) or (a + c = b) or (b + c = a) then writeln('Yes')
  else writeln('No');
end.

3. Футбольний матч

Відомо, що збірна Україна зіграла два футбольних матчі зі збірною Потоколяндії. Один з них був в Україні, другий — в Потоколяндії.
У першому матчі, який грали в Україні, збірна України забила голів, а збірна Потоколяндії — голів. У другому матчі, який грали в Потоколяндії, збірна Потоколяндії забила голів, а збірна України — голів.
Переможець поєдинків визначається так:
  • Виграє та команда, яка сумарно забила більше голів.
  • Якщо команди забили однакову кількість голів, то перемагає та команда, яка забила більше голів «у гостях», тобто в матчі, який грався в іншій країні.
  • Якщо неможливо визначити переможця, то оголошується нічия.
Допоможіть, будь ласка, визначити, яка команда переможе.

Вхідні дані

Перший рядок містить два цілі числа та () — кількість голів забитих у матчі, який грали в Україні, збірними України та Потоколяндії відповідно.
Другий рядок містить два цілі числа та () — кількість голів забитих у матчі, який грали у Потоколяндії, збірними Потоколяндії та України відповідно.

Вихідні дані

Виведіть «U», якщо переможе збірна України, якщо ж переможе збірна Потоколяндії, то виведіть «P», інакше — виведіть «T».

Примітка

У першому прикладі збірна України забила сумарно голів, а збірна Потоколяндії лише , тому перемагає збірна України.
У другому прикладі кожна збірна забила сумарно по голи, але збірна Потоколяндії забила один гол у матчі «у гостях», тому вона і перемагає.
Ліміт часу 1 секунда
Ліміт використання пам'яті 256 MiB
Вхідні дані #1
3 2
2 4
Вихідні дані #1
U
Вхідні дані #2
2 1
1 0
Вихідні дані #2
P
Вхідні дані #3
2 0
2 0
Вихідні дані #3
T

Розв’язання: 

program summa;
var
  a, b, c, d: integer;
begin
  readln(a, b);
  readln(c, d);
  if (a + d) > (c + b) then writeln('U') else 
  if (a + d) < (c + b) then writeln('P') else
  if (b > d) then writeln('P') else
  if(d > b) then writeln('U') else writeln('T');
end. 

4.Шахівниця

Дано шахівницю .
Дано координати клітини, визначіть її колір.

Вхідні дані

Перший рядок містить два символи: перший — літера від «A» до «H», а другий — цифра від «1» до «8».

Вихідні дані

Виведіть «BLACK», якщо клітина чорна; інакше — виведіть «WHITE».
Ліміт часу 1 секунда
Ліміт використання пам'яті 256 MiB
Вхідні дані #1
A1
Вихідні дані #1
BLACK
Вхідні дані #2
G4
Вихідні дані #2
WHITE
Вхідні дані #3
B7
Вихідні дані #3
WHITE 

Розв’язання: 

 program shax;
var
  a: string;
  m, n: integer;
begin
  readln(a);
  case a[1] of
    'A': n := 1;
    'B': n := 2;
    'C': n := 3;
    'D': n := 4;
    'E': n := 5; 
    'F': n := 6;
    'G': n := 7;
    'H': n := 8;
  end;
  case a[2] of
    '1': m := 1;
    '2': m := 2;
    '3': m := 3;
    '4': m := 4;
    '5': m := 5;
    '6': m := 6;
    '7': m := 7;
    '8': m := 8;
  end;
  if (m + n) mod 2=0 then writeln('BLACK') else writeln('WHITE');
end.

5. Прямокутник

Для побудови прямокутника потрібні координати протилежних вершин. Сторони прямокутника паралельні осям координат. Складіть програму, яка знайде координати двох інших протилежних вершин прямокутника.

Вхідні дані

Перший рядок містить чотири цілі числа , , , (-, , ) — координати протилежних вершин.

Вихідні дані

Виведіть чотири цілі числа , , ,  — координати інших протилежних вершин, спочатку ліву вершину, потім праву.
Ліміт часу 1 секунда
Ліміт використання пам'яті 256 MiB
Вхідні дані #1
4 1 5 4
Вихідні дані #1
4 4 5 1
Вхідні дані #2
5 3 3 1
Вихідні дані #2
3 3 5 1

Розв’язання: 

program abcd;
var
  x1, y1, x2, y2: integer;
begin
  readln(x1, y1, x2, y2);
  if (x1 <= x2) then writeln(x1, ' ', y2, ' ', x2, ' ', y1)
  else writeln(x2, ' ', y1, ' ', x1, ' ', y2);
end.

6. Естафети

Соня отримала завдання — провести естафету для першокласників. Відомо, що учні будуть поділені на команди хлопців та дівчат, а також те, що в обох командах має бути однакова кількість учасників. Найголовніше — потрібно визначити рівень успішності цього заходу.
Рівень успішності — це максимальна кількість учасників, яка може бути в одній з команд.
Соня хоче скоріше визначити рівень успішності заходу та піти розв'язувати задачі з програмування, тому просить Вас допомогти їй.

Вхідні дані

Перший рядок містить одне ціле число () — кількість першокласників.
Другий рядок містить цілих чисел () — , якщо -ий школяр хлопець, або , якщо дівчина.

Вихідні дані

Виведіть одне число — максимальний рівень успішності.

Примітка

У першому прикладі можна запросити в команду хлопців першого, п'ятого та шостого, а в команду дівчат другу, четверту та сьому, але замість кожної з них може бути й третя.
У другому прикладі в команді хлопців можуть бути перший та третій, хоча замість них може бути будь-хто з інших чотирьох хлопців, а в команді дівчат можуть бути п'ята та шоста.
Ліміт часу 1 секунда
Ліміт використання пам'яті 256 MiB
Вхідні дані #1
7
1 2 2 2 1 1 2
Вихідні дані #1
3
Вхідні дані #2
8
1 1 1 1 2 2 1 1
Вихідні дані #2
2

Розв’язання: 

program usp;
var
  i, n, m1, n2: integer;
  a: array[1..100] of integer;
begin
  readln(n);
  for i := 1 to n do read(a[i]);
  for i := 1 to n do
  begin
    if a[i] = 1 then m1 := m1 + 1;
    if a[i] = 2 then n2 := n2 + 1;
  end;
  if m1 < n2 then writeln(m1) else writeln(n2);
end.
 

7. Мандрівка

Козак Вус збирається у мандрівку. У Потоколяндії міст розташованих на прямій та пронумерованих цілими числами від до . Кожне місто характеризується певним значенням  — координатою міста. Відстань між містами з номерами та рівна .
Козак Вус хоче дізнатись мінімальну відстань, яку йому доведеться пройти, мандруючи Потоколяндією, за умови, що він повинен побувати у кожному місті хоча б один раз та завершити мандрівку у місті, з якого її почав. Ваше завдання знайти мінімальну довжину маршруту при умові, що місто, з якого почне мандрівку Козак, та його маршрут залишаються на Ваш розсуд.

Вхідні дані

Перший рядок містить одне ціле число ().
Другий рядок містить цілих чисел ().

Вихідні дані

Виведіть одне ціле число — мінімальну довжину маршруту Козака Вуса.
Ліміт часу 1 секунда
Ліміт використання пам'яті 256 MiB
Вхідні дані #1
2
1 4
Вихідні дані #1
6
Вхідні дані #2
3
1 3 1
Вихідні дані #2
4

Розв’язання: 

program usp;
var
  i, n, min, max: integer;
  a: array[1..100] of integer;
begin
  readln(n);
  for i := 1 to n do read(a[i]);
  min := a[1];max := a[1];
  for i := 1 to n do
  begin
    if a[i] < min then min := a[i];
    if a[i] > max then max := a[i];
  end;
  writeln((max - min) * 2);
end.
 

8. Стовпчики

Дано стовпчиків з кубиків, -ий має висоту . Потрібно знайти мінімальну кількість кольорів, які потрібні, щоб розфарбувати усі кубики так, щоб в усіх підрядках та стовпчиках були різні кольори. Зверніть увагу, що підрядок — це горизонтальна послідовність кубиків, що йдуть підряд, тобто без пропусків.

Вхідні дані

Перший рядок містить одне ціле число () — кількість стовпчиків.
Другий рядок містить цілих чисел () — висота -го стовпчика.

Вихідні дані

Виведіть одне число — мінімальну кількість кольорів, які потрібні, щоб розфарбувати усі кубики так, щоб в усіх підрядках та стовпчиках були різні кольори.

Примітка

Одне з можливих рішень:
Зверніть увагу, що в третьому рядку знизу два однакових кольори, таке може бути, якщо між ними пропуск (третій стовпчик має висоту ).
Ліміт часу 1 секунда
Ліміт використання пам'яті 256 MiB
Вхідні дані #1
4
6 5 2 4
Вихідні дані #1
6

Розв’язання:

  program usp;
var
i, n,max: integer;
a: array[1..100] of integer;
begin
readln(n);
for i := 1 to n do read(a[i]);
max:=a[1];
for i:=1 to n do
if a[i]>max then max:=a[i];
writeln(max);
end.

9. Козак Вус та коло

Нещодавно Козак Вус знайшов чарівне коло! По ньому розташовано вершин, так що вершини та  — сусідні для . Також вершини з номерами та — сусідні. Кожна вершина має своє значення .
Козак Вус почав робити наступні дії з цим колом. Він вибрав число . Якщо вершини та сусідні та , то він розрізає коло по дузі, що сполучає ці дві вершини. Іншими словами, він робить розріз між двома сусідніми вершинами, значеннях яких рівні .
Чи можна вибрати так число , щоб Козак Вус зробив принаймні два розрізи?

Вхідні дані

Перший рядок містить одне ціле число () — кількість вершин на колі.
Другий рядок містить цілих чисел () — масив .

Вихідні дані

Виведіть «Yes», якщо можливо обрати таке число , що Козак Вус зробить хоча б два розрізи, інакше виведіть «No».
 

10. Козак Вус та додавання

У славнозвісного Козака Вуса є менш відомий друг Возак Кус. Він обожнює додавати числа в стовпчик, але, на превеликий жаль усієї його родини, робить це неправильно.
Возак Кус додає два числа та , кожне з цифр, наступним чином, починаючи з останніх цифр:
  1. Якщо над поточними цифрами стоїть крапочка — забути про неї.
  2. Додати відповідні цифри чисел та та отримати число .
  3. Записати на відповідну позицію в результаті останню цифру числа .
  4. Якщо - поставити крапочку над попередніми цифрами.
  5. Перейти до попередніх цифр і почати з кроку .
Наприклад, за методом Возака Куса, , а .
Козаку Вусу стало цікаво, скільки існує пар чисел та довжини , для яких його друг правильно порахує суму.
Зверніть увагу, що непотрібно рахувати числа, які містять провідні нулі. Тобто число для рахувати непотрібно. Також пари чисел та вважаються різними.

Вхідні дані

Перший рядок містить одне ціле число ().

Вихідні дані

Виведіть одне число — відповідь на задачу.

Примітка

Ось декілька прикладів пар довжини , , , , тощо.
Ліміт часу 1 секунда
Ліміт використання пам'яті 256 MiB
Вхідні дані #1
2
Вихідні дані #1
1980
 
 

Немає коментарів:

Дописати коментар