Сайт підготовки до олімпіади з інформатики

програмування в С++

Школа олімпійського резерву з інформатики
Готуємось до олімпіади з інформатики - 1 PDF Печать E-mail
Добавил(а) Administrator   
11.01.12 13:30

Готуємось до олімпіади з інформатики - 1

Задача 1. Сума (3 бали)

У стандартному вхідному потоці дано чотири дійсні числа.

У стандартний вихідний потік вивести їх суму із чотирма знаками після коми.

Приклади

Вхідні дані

Результат роботи

3 4 2.5 1

10.5000

Задача 2. Дільники (30 балів)

Дано натуральне число N. Знайти число від 1 до N з максимальною сумою дільників.

Формат вхідних даних. Стандартний вхідний потік містить N (N ≤ 10000).

Формат вихідних даних. У стандартний вихідний потік вивести шукане число. Якщо таких чисел декілька, то вивести будь-яке.

Приклад вхідних та вихідних даних.

Вхід

Вихід

5

4

Задача 3. Спільний відрізок (30 балів)

Дано N відрізків прямої. Знайти довжину відрізка, що є спільним для всіх.

Формат вхідних даних. У першому рядку вхідного потоку міститься число N (1 ≤ N ≤ 100). У наступних N рядках задаються координати лівого та правого кінців відрізка. Координати - цілі числа від 0 до 30000. Лівий кінець відрізка завжди має координату меншу за праву.

Формат вихідних даних. У вихідний потік виведіть шукану довжину відрізка. Якщо такого відрізка не існує, то вивести 0.

Приклад вхідних та вихідних даних.

Вхід

Вихід

3

1 10

3 15

2 6

3

3

1 10

2 20

11 20

0

Задача 4. Переможець (27 балів)

Інтернет-олімпіада з інформатики набуває все більшої популярності. Вже не рідкість участь в одному турі олімпіади кількох команд від однієї школи. Зрозуміло, що вони змагаються не тільки з іншими командами, але і між собою. До того ж перемога у «шкільному» змаганні часто більш важлива, ніж місце на олімпіаді.

Від однієї школи міста N-ська в усіх одинадцяти базових Інтернет-олімпіадах цього сезону брали участь дві команди. Тепер вони хочуть з'ясувати, хто з них переміг у загальному заліку.

Для кожної команди відомо, яке місце вона зайняла у кожній Інтернет-олімпіаді. Загальний залік у цій школі ведеться за такими правилами:

- За кожну Інтернет-олімпіаду команда, яка зайняла більш високе місце, отримує більше очок, чим команда, яка зайняла нижче місце.

- Передбачено, що команди не можуть зайняти однакові місця.

Ваше завдання - написати програму, яка за результатами цих команд в 11 Інтернет-олімпіадах визначатиме, хто з них переміг у загальному заліку цієї школи. 

Формат вхідних даних: перший рядок вхідного потоку містить 11 цілих числа: a1, a2,..., a11 - місця, які зайняла перша команда згаданої школи у першій, другій, ..., одинадцятій Інтернет-олімпіадах.

Другий рядок містить місця b1, b2,..., b11, зайняті другою командою, в аналогічному форматі.

Всі числа цілі, додатні і не більші за 100. Для всіх i = 1...11 вірна нерівність ai ≠ bi.

Формат вихідних даних: у вихідний потік виведіть слово First, якщо у загальному заліку виграла перша команда, або слово Second, якщо перемогла друга команда.

Приклад вхідних і вихідних даних:

Вхід

Вихід

1 2 3 4 5 6 7 8 9 10 11

2 3 4 5 6 7 8 9 10 11 12

First

2 2 1 1 2 2 1 1 2 2 1

1 1 2 2 1 1 2 2 1 1 2

Second

Попередження: Розв'язок учасника олімпіади, що виводить лише один з варіантів відповіді на всі тести буде дискваліфікований.

Задача 5. Точки (60 балів)

Недавно Петрик навчився малювати відрізки. Тепер його зацікавила кількість точок з цілими координатами, що належать даному відрізку.

Допоможіть йому!

Формат вхідних даних: вхідний потік містить чотири цілих числа x1, y1 i x2, y2 - координати кінців відрізка.

Координати задаються в межах від -1 000 000 000 до 1 000 000 000.

Формат вихідних даних: вихідний потік  має містити одне число - кількість точок.

Приклади вхідних та вихідних даних:

Вхід

Вихід

0 0 2 0

3

 

 

 
Формула Піка PDF Печать E-mail
Добавил(а) Administrator   
14.12.11 09:51

Для вирішення завдання на визначення кількості цілих точок треба використовувати формулу Піка, яка записується так: x = s - n div 2 + 1, де s - площа багатокутника, n - кількість цілочисельних точок на його сторонах.
 
Тобто нам необхідно знати площу багатокутника. Відома формула S = 1 / 2 * | (x1y2 - x2y1) + (x2y3 - x3y2) + ... + (xny1 - x1yn) |.

            Слід підрахувати кількість цілочисельних точок на сторонах багатокутника. Для цього треба порахувати довжину проекцій кожної сторони на координатні осі. Кількість точок на стороні - НСД довжин цих проекцій. НСД за алгоритмом Евкліда визначається так: на кожному кроці замінюємо найбільше з двох чисел на залишок ділення цього числа на менше, до тих пір, поки одна з чисел не стане рівним нулю. Число, що залишилося і є найбільший спільний дільник цих чисел. При підрахунку кількості точок слід також не забути порахувати відрізок, що з'єднує останню і першу точки багатокутника.
 Тепер ми вирахували все необхідне і залишилося тільки скористатися формулою, яка наведена на початку розбору: x = s - n div 2 + 1.

 
Задачі для самостійного опрацювання 2011-2012 н.р (рівень 2) PDF Печать E-mail
Добавил(а) Administrator   
07.12.11 13:01
Задачі для самостійного опрацювання 2011-2012 н.р (рівень 2)
Завдання розв’язати до 23.12.2011 та  надіслати на електронну адресу Данный адрес e-mail защищен от спам-ботов, Вам необходимо включить Javascript для его просмотра.
Задача 1.  (20 балів)
При змаганні по спортивному орієнтуванні учаснику потрібно пройти N (N£10000) контрольних точок. При проходженні кожної наступної точки, пристрій фіксує її положення, як зміну по горизонталі і вертикалі по відношенню до попередньо пройденої точки, ціле число в межах [-10000;10000] .


Знайти відстань, яку пройде учасник з початкової точки в N-ту точку. Кожну відстань учасник проходить по найкоротшій відстані.
Вхідні дані містяться у файлі REFI.DAT. В першому рядку ціле число N – кількість контрольних точок. В наступних N рядках містяться по два цілих числа, розділених пропуском.
Результат вивести у файл REFI.SOL у вигляді рядка, який містить дійсне число з двома знаками після коми.
Приклад.
REFI.DAT
4
3 4
2 0
0 -4
-2 0
REFI.SOL
13.00

Задача 2. (30 балів)
За попередньою умовою знайти відстань, яку пройшов учасник, якщо він повернувся в початкову точку, з якої відбувся старт.
Приклад.
REFI.DAT
4
3 4
2 0
0 -4
-2 0
REFI.SOL
16.00

Задача 3. (50 балів)
Результати учасників змагання з спортивного орієнтування задаються трійкою цілих чисел: його стартовим номером та кількістю хвилин і секунд. Написати програму читання результатів учасників і друкування їх у порядку неспадання часу на кожній контрольній точці. Вхідні дані містяться в файлі START.DAT: 1 рядок: кількість учасників N; 2 рядок: кількість контрольних точок M; N*M рядків: номер, хвилини, секунди. Результат вивести у файл  FINISH.SOL у вигляді послідовності рядків з стартових номерів для кожної контрольної точки.
Наприклад.
START.DAT
3
2
12 10 20
20 5 20
12 8 25
20 14 20
12 1 20
20 0 20
FINISH.SOL

20 12
12 20
20 12

 
Задачі для самостійного опрацювання 2011-2012 н.р (рівень 1) PDF Печать E-mail
Добавил(а) Administrator   
07.12.11 12:59
Задачі для самостійного опрацювання 2011-2012 н.р (рівень 1)
Завдання розв'язати до 23.12.2011 та  надіслати на електронну адресу Данный адрес e-mail защищен от спам-ботов, Вам необходимо включить Javascript для его просмотра.
Задача1 Скільки коштує корок? (5 балів)
Пляшка разом з корком коштує a грн b коп. Відомо, що пляшка дорожча за корок на a грн. Скільки коштує корок?
Вхідний файл: INPUT.DAT
Вхідний файл: OUTPUT.SOL
Задача 2. Записати число (5 балів)
Введене двоцифрове число записати в зворотному порядку.(5 балів)
Вхідний файл: INPUT.DAT
Вхідний файл: OUTPUT.SOL
Задача 3. Дата (10 балів)
Даний час  (години,  хвилини,  секунди)  -  три  цілих числа. Скласти  програму  визначення  часу  через  10 секунд.
Вхідний файл: INPUT.DAT
Вхідний файл: OUTPUT.SOL
Задача 4. Час (10 балів)
Трійка чисел (T1,M1,C1) задає  стартовий  час,  а  трійка (T2,M2,C2) - фінішний час учасника лижної гонки на 30 км (години, хвилини, секунди). Перевірити коректність даних  і знайти результат учасника.
Вхідний файл: INPUT.DAT
Вхідний файл: OUTPUT.SOL
Задача 5. Паліндром (15 балів)
Вивести всі числа паліндроми до 10000. (Наприклад 2112, читається однаково зліва направо і навпаки).
Вхідний файл: INPUT.DAT
Вхідний файл: OUTPUT.SOL
Задача 6. Досконале число (15 балів)
Знайти досконалі числа на проміжну [1..n].
6=1+2+3 (досконале - рівне сумі всіх своїх дільників, крім останнього)
Вхідний файл: INPUT.DAT
Вхідний файл: OUTPUT.SOL
Задача 7. Кількість елементів(20 балів)
Дано таблиця  а[1],  а[2],...,a[1000] дійсних чисел.  Визначити    максимальну    кількість  додатних елементів, що йдуть підряд і не  перериваються ні нулями, ні від'ємними елементами.
Вхідний файл: INPUT.DAT
Вхідний файл: OUTPUT.SOL
Задача 8. Надпросте число (20 балів)
Натуральне  число,  записане  в  десятковій  системі числення,  називається  надпростим,  якщо   воно   залишається простим  при  будь-якій  перестановці  своїх  цифр.  Визначити чи є дане число надпростим.
Вхідний файл: INPUT.DAT
Вхідний файл: OUTPUT.SOL
Загальна сума 100 балів.
Зауваження. Реалізуйте задачі з використанням роботи з файлами.

Додаткова задача
Задача 9. Бики і корови.
У гру "Мастермайнд" ("Бики і корови") грають  так:  одна людина задумує чотиризначне число, в якому ніякі дві цифри не співпадають; інший гравець називає чотиризначні числа з попарно неспівпадаючими цифрами; перший гравець для кожного з цих чисел повідомляє другому загальна кількість його  цифр,  які є в задуманому числі, і кількість співпадаючих цифр в однакових розрядах названого і задуманого числа. Другий  гравець повинен вгадати задумане число як можна за меншу  кількість питань. Написати програму, що грає:
а) за  гравця, який задумав число;
б) за відгадуючого гравця.

 
Формули обчислювальної геометрії PDF Печать E-mail
Добавил(а) Administrator   
07.12.11 12:54
Формули обчислювальної геометрії
Визначення площі довільного многокутника
За заданими координатами вершин многокутника визначити його площу.
Для обчислення площі можна використати формулу:

Перевірка многокутника на опуклість
{ Зчитування координат вершин многокутника}
assign(f,'input.txt');
reset(f);
readln(f,n);
for i:=1 to n do readln(f,x[i],y[i]);
close(f);
{Визначення координат векторів}
x[n+1]:=x[1];
y[n+1]:=y[1];
for i:=1 to n do begin
a[i]:=x[i+1]-x[i];
b[i]:=y[i+1]-y[i];
end;
{Підрахунок кількості додатних добутків}
a[n+1]:=a[1];
b[n+1]:=b[1];
k:=0;
for i:=1 to n do
if a[i]*b[i+1]-a[i+1]*b[i]>=0 then k:=k+1;
{Виведення результату}
assign(f,'output.txt');
rewrite(f);
if (k=n)or(k=0) then writeln(f,'yes') else writeln(f,'no');
close(f);


Належність точки прямій

(x-x1)/(x2-x1)=(y-y1)/(y2-y1)
(x-x1)* (y2-y1) =(y-y1)* (x2-x1)

p:=false;
if (x-x1)* (y2-y1) -(y-y1)* (x2-x1)=0  then p:=true;

Перетин прямих

(x-x1)/(x2-x1)=(y-y1)/(y2-y1)
(x-x1)* (y2-y1) =(y-y1)* (x2-x1)



(x-x3)/(x4-x3)=(y-y3)/(y4-y3)
(x-x3)* (y4-y3) =(y-y3)* (x4-x3)

1)
x=(y-y1)*(x2-x1)/(y2-y1)+x1
(x-x3)* (y4-y3) =(y-y3)* (x4-x3)

((y-y1)*(x2-x1)-(x3-x1)*(y2-y1))*(y4-y3)=(y-y3)*(x4-x3)*(y2-y1)
(y-y1)*(x2-x1)*(y4-y3)-(y-y3)*(x4-x3)*(y2-y1)=(x3-x1)*(y2-y1)*(y4-y3)
y((x2-x1)*(y4-y3)-(x4-x3)*(y2-y1))= (x3-x1)*(y2-y1)*(y4-y3)+y1*(x2-x1)*(y4-y3)-y3*(x4-x3)*(y2-y1)

y=((x3-x1)*(y2-y1)*(y4-y3)+y1*(x2-x1)*(y4-y3)-y3*(x4-x3)*(y2-y1))/ ((x2-x1)*(y4-y3)-(x4-x3)*(y2-y1))

2)
y=(x-x1)*(y2-y1)/(x2-x1)+y1
(y-y3)* (x4-x3) =(x-x3)* (y4-y3)

((x-x1)*(y2-y1)-(y3-y1)*(x2-x1))*(x4-x3)=(x-x3)*(y4-y3)*(x2-x1)
(x-x1)*(y2-y1)*(x4-x3)-(x-x3)*(y4-y3)*(x2-x1)=(y3-y1)*(x2-x1)*(x4-x3)
x((y2-y1)*(x4-x3)-(y4-y3)*(x2-x1))= (y3-y1)*(x2-x1)*(x4-x3)+x1*(y2-y1)*(x4-x3)-x3*(y4-y3)*(x2-x1)

x=((y3-y1)*(x2-x1)*(x4-x3)+x1*(y2-y1)*(x4-x3)-x3*(y4-y3)*(x2-x1))/ ((y2-y1)*(x4-x3)-(y4-y3)*(x2-x1))
Перетин відрізків:
if (x1<=x2)and(x>=x1)and(x<=x2) then p:=true;
if (x2<=x1)and(x>=x2)and(x<=x1) then p:=true;
Перетин відрізків
var x1,y1,x2,y2,x3,y3,x4,y4,x,y:real;
p:boolean;
begin
clrscr;
writeln('x1,y1');
readln(x1,y1);
writeln('x2,y2');
readln(x2,y2);
writeln('x3,y3');
readln(x3,y3);
writeln('x4,y4');
readln(x4,y4);
p:=false;
if (((x2-x1)*(y4-y3)-(x4-x3)*(y2-y1))<>0) and (y2-y1<>0) then
begin
y:=((x3-x1)*(y2-y1)*(y4-y3)+y1*(x2-x1)*(y4-y3)-y3*(x4-x3)*(y2-y1))/((x2-x1)*(y4-y3)-(x4-x3)*(y2-y1));
x:=(y-y1)*(x2-x1)/(y2-y1)+x1;
p:=true;
end;

{if p then writeln(x:2:2,' ',y:2:2);}

p:=false;
if (((y2-y1)*(x4-x3)-(y4-y3)*(x2-x1))<>0)and (x2-x1<>0)then
begin
x:=((y3-y1)*(x2-x1)*(x4-x3)+x1*(y2-y1)*(x4-x3)-x3*(y4-y3)*(x2-x1))/ ((y2-y1)*(x4-x3)-(y4-y3)*(x2-x1));
y:=(x-x1)*(y2-y1)/(x2-x1)+y1;
p:=true;
end;

if p then
begin
p:=false;
if (x1<=x2)and(x>=x1)and(x<=x2) then p:=true;
if (x2<=x1)and(x>=x2)and(x<=x1) then p:=true;
end;



if p then writeln(x:2:2,' ',y:2:2);
end.




Задача 1.  Рух автомобіля
Маршрут руху автомобіля заданий у вигляді координат вершин ламаної. Необхідно визначити кількість лівих поворотів. Автомобіль починає рух першої вершини ламаної.

Задача 2.  Едемський сад
Едемський сад складається з N фруктових дерев, розміщення яких задано координатами (Xi,Yi), а їх врожайності, відповідно, дорівнюють Ui, i=1,2,...,N. Садівник обгородив сад огорожею мінімальної довжини. Розробити програму, яка виводить на екран план Едемського саду, на якому ілюструється взаємне розміщення огорожі і дерев. При цьому:
1. Забезпечити можливість введення початкових даних як з клавіатури, так і з файлу EDEM.GOD, і відображати їх на дисплеї у вигляді плану Едемського саду (врахувати, що перший запис файлу EDEM.GOD вміщує значення N, а в кожному   з  наступних  N  записів  вміщуються  по  три  числа - Xi, Yi і Ui, де  1? i ? N, N ? 20; числа в кожному записі розділені пропусками. (5 балів).
2. Забезпечити можливість діалогу редагування початкових даних з синхронним відображенням результатів редагування на плані Едемського саду. (5 балів).
3. Обчислювати і виводити на дисплей врожайність всього саду. (5 балів).
4. Обчислювати і виводити на дисплей максимальну відстань між деревами саду. (5 балів).
5. Обчислювати і виводити на дисплей мінімальну відстань між сусідніми деревами саду. (5 балів).
6. Визначати кількість рогів в найкоротшій огорожі. (12 балів).
7. Обчислювати і виводити на дисплей периметр огорожі саду. (10 балів).
8. Обчислювати і виводити на дисплей площу обгородженого  саду. (10 балів).
9. Автоматично наносити на план саду найкоротший маршрут, додержуючись якого, можна обійти всі дерева і повернутися до місця старту, обчислювати відстань за цим маршрутом. (12 балів).
10. Динамічно відображати на плані обхід Едемського саду садівником вздовж знайденого найкоротшого маршруту. (10 балів)
 
Аналіз задач. П'ятий тур 2011 PDF Печать E-mail
Добавил(а) Administrator   
28.11.11 15:58

П'ятий тур

Розв'язки задач відправляти з  21.11  по  04.12.2011р.

Задача

Ідея розв'язку

1. Задача MATCHES (20 балів)

Ім'я вхідного файлу:   MATCHES.DAT

Ім'я вихідного файлу: MATCHES.SOL

Максимальний час роботи на одному тесті: 2с

 

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

Необхідно написати програму для знаходження числа всіх можливих варіантів здобуття  за N матчів деякою футбольною командою M очок.

 

Формат вхідних даних.

Єдиний рядок вхідного файлу MATCHES.DAT містить два натуральні числа N та M  (1<=N<=20,0<=M<=60). Числа між собою розділені пробілами.

 

Формат вихідних даних.

Єдиний рядок вихідного файлу MATCHES.SOL повинен містити одне натуральне число - кількість всіх можливих варіантів.

 

Задача подібно до задачі «Паліндром» (3 тур)

Берем максимум виграних матчів

K3= m/3;

K1=m ост 3;

K0=n-K3-K1;

 

Рахуємо кількість способів за формулою

 s=n!/(K0!*K1!*K3!)

На наступних кроках

K3=K3-1

K1=K1+3;

 

 

 

Последнее обновление 14.12.11 11:59
 
Греко–латинський квадрат PDF Печать E-mail
Добавил(а) Administrator   
15.11.11 11:44

Греко–латинський квадрат

Греко–латинським квадратом називається квадрат N x N, в кожному рядку, в кожному стовпці і в кожній діагоналі якого містяться всі цілі числа від 1 до N. Приклад такого квадрата 4 х 4.

Написати програму, яка:

n будує хоча б один квадрат порядку N;

In.txt

4

Out.txt

1 2 3 4

4 3 2 1

2 1 4 3

3 4 1 2

 
Деталі PDF Печать E-mail
Добавил(а) Administrator   
15.11.11 11:43

Деталі

Вибiр складається з N деталей. Є N верстатiв, на кожному з яких можна виготовити будь-яку деталь. Для кожних верстату та деталей вiдомий час t[i,k] виготовлення k-ї деталi на i-му верстатi. Напишiть програму, яка визначить, на якому верстатi слiд виготовити кожну де- таль, щоб одночасно почавши виготовляти всi деталi, завершити виго- товлення всмх деталей якнайшвидше.

Технiчнi умови

1) Iмена файлiв програми, вхiдних та вихiдних даних: DETAILS.???, DETAILS.DAT, DETAILS.SOL, де ??? - PAS, BAS, C, CPP (в залежностi вiд мови програмування).

2) Перший рядок вхiдного файлу мiстить кiлькiсть текстiв. Перший рядок кожного тексту мiстить кiлькiсть верстатiв та деталей N(1<=N<=50). Кожен з наступних N рядкiв мiстить тривалостi виготов- лення деталей на вiдповiдному верстатi t[i,1], t[i,2],...,t[i,N], вiдокремленi комами. Кожне з цих чисел натуральне i не перевершує 100.

3) Коректнiсть вхiдних даних гарантується.

4) У вихiдний файл для кожного тесту треба послiдовно вивести в один рядок. Номери деталей, якi треба виготовити вiдповiдно на 1-му, 2-му,..., N-му верстатах, вiдокремивши їх пропусками. В наступний ря- док треба вивести час вiд початку до завершення виготовлення всiх де- талей.

5) Для кожного тесту досить знайти один розв`язок.

Приклад вхiдного та вихiдного файлiв

Вхiдний(DETAILS.DAT):

2

2

3,2

1,2

3

3,3,3

3,3,3

3,3,3

Вихiдний (DETAILS.SOL):

2 1

2

1 2 3

3

 


Страница 20 из 27

Статистика

Пользователей : 261
Статей : 225
Просмотрено статей : 105518

Вход/Регистрация

Нет