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

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

Школа олімпійського резерву з інформатики
Розбір задач 1-4 (заняття 1 ---03.10.20112) PDF Печать E-mail
Добавил(а) Гісь Ігор Володимирович   
12.10.12 19:13

Програми розв'язку task1, task2_1, task2_2, task3_1, task3_2, task3_3, task4

Тести для перевірки test1, test2, test3, test4

Повторення базові структури алгоритмів

Задача 1.

Обчислити суму, різницю та добуток двох введених чисел.

 

Задача 2.

Перевірити правильність виразу

a o b = c

за заданими трьома числами a, b, c та операцією o(+ - *).

Задача 3.

Для заданого N знайти всі значення виразу

a o b о c, де

a, b, c натуральні числа <=N операцією o(+ - *).

#include "stdafx.h"

#include "iostream"

using namespace std;

 

 

int _tmain()

{

int a,b,s,r,d;

cin>>a>>b;

s=a+b;

r=a-b;

d=a*b;

cout<<s<<"\n";

cout<<r<<endl;

cout<<d<<endl;

return 0;

}

 

#include "stdafx.h"

#include "iostream"

using namespace std;

 

 

int _tmain()

{

int a,b,c;

char o;

cin>>a>>b>>c;

cout<<"+ - * ";

cin>>o;

if ((o=='+' && a+b==c)||(o=='-' && a-b==c)||(o=='*' && a*b==c))

cout<<a<<o<<b<<"="<<c<<"\n";

else

cout<<a<<o<<b<<"<>"<<c<<"\n";

return 0;

}

 

#include "stdafx.h"

#include "iostream"

using namespace std;

int _tmain()

{

int n,a,b,c,r;

cin>>n;

for (a=1;a<=n;a++)

for (b=1;b<=n;b++)

for (c=1;c<=n;c++)

{

r=a+b+c; cout<<a<<"+"<<b<<"+"<<c<<"="<<r<<endl;

r=a+b-c; cout<<a<<"+"<<b<<"-"<<c<<"="<<r<<endl;

r=a+b*c; cout<<a<<"+"<<b<<"*"<<c<<"="<<r<<endl;

r=a-b+c; cout<<a<<"-"<<b<<"+"<<c<<"="<<r<<endl;

r=a-b-c; cout<<a<<"-"<<b<<"-"<<c<<"="<<r<<endl;

r=a-b*c; cout<<a<<"-"<<b<<"*"<<c<<"="<<r<<endl;

r=a*b+c; cout<<a<<"*"<<b<<"+"<<c<<"="<<r<<endl;

r=a*b-c; cout<<a<<"*"<<b<<"-"<<c<<"="<<r<<endl;

r=a*b*c; cout<<a<<"*"<<b<<"*"<<c<<"="<<r<<endl;

}

return 0;

}

Задача 4

Для задачі 3 знайти значення результату, яке повторюється найбільше

Обчислити факторіал

#include "stdafx.h"

#include "iostream"

using namespace std;

int _tmain()

{

int n,a,b,c,r[1000];

cin>>n;

int k=0;

//заповнення масиву результатів

for (a=1;a<=n;a++)

for (b=1;b<=n;b++)

for (c=1;c<=n;c++)

{ k++;r[k]=a+b+c;  k++;r[k]=a+b-c;  k++;r[k]=a+b*c;  k++;r[k]=a-b+c;  k++;r[k]=a-b-c;  k++;r[k]=a-b*c;  k++;r[k]=a*b+c;  k++;r[k]=a*b-c;

k++;r[k]=a*b*c; }

//Сортування масиву

int i,j,temp;

for (i=1;i<=k;i++)

for (j=1;j<=k;j++)

if (r[i]<r[j]) {temp=r[i];r[i]=r[j];r[j]=temp;}

 

//Вивведення масиву

//for (i=1;i<=k;i++)cout<<r[i]<<" ";cout<<"\n";

 

//пошук кількості сусідніх однакових елементів

int k1,k2,el;

k1=1;k2=0;

for (i=1;i<k;i++)

if (r[i]==r[i+1]) {k1++;}

else {if (k1>k2){k2=k1;el=r[i];}

k1=1;}

cout<<el<<"  "<<k2<<endl;

return 0;

}

 

#include "stdafx.h"

#include "iostream"

using namespace std;

 

 

int _tmain()

{

int i,n;

int f[1000];

cin>>n;

f[0]=1;

for (i=1;i<=n;i++)

{f[i]=f[i-1]*i;

cout<<i<<"!="<<f[i]<<endl;

}

return 0;

}

 
Задача 5. Task5 PDF Печать E-mail
Добавил(а) Гісь Ігор Володимирович   
03.10.12 09:34

Задача 5. Task5

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

Вхідні дані. Вхідний текстовий файл Task5.in містить в першому рядку число N (3<=N<=1000) , далі слідують 3*N рядків, у кожному по 2 цілих чисел розділених пропусками – координати вершини трикутника (|x,y|<=2147483647).

Вихідні дані. Вихідний текстовий файл Task5.out містить один рядок з цілим числом k - загальну кількість трикутників , або число 0, якщо учень побудував хоча б один трикутник не прямокутний.

Приклади файлів

Task5.in

Task5.out

Task5.in

Task5.out

2

0 0

0 0

0 3

0 -3

4 0

- 4 0

2

2

0 0

0 0

0 3

0 -3

4 0

- 4 1

0

Последнее обновление 03.10.12 17:54
 
Задача 4. Task4 PDF Печать E-mail
Добавил(а) Гісь Ігор Володимирович   
03.10.12 09:24

Задача 4. Task4

Для заданого натурального N(N<=100) знайти всі значення виразу a o b о c, яке повторюється найбільше, де a, b, c натуральні числа <=N операцією o(+ - *).

Вхідний файл Task4.in містить рядок з одного натурального числа.

Вихідний файл Task4.out містить рядок з знайденим результатом. Якщо таких значень декілька, то вивести максимальний.

Последнее обновление 03.10.12 10:06
 
Задача 3. Task3 PDF Печать E-mail
Добавил(а) Гісь Ігор Володимирович   
03.10.12 09:23

Задача 3. Task3

Для заданого натурального N(N<=100) знайти всі значення виразу a o b о c, де a, b, c натуральні числа <=N операцією o(+ - *).

Вхідний файл Task3.in містить рядок з одного натурального числа.

Вихідний файл Task3.out містить рядок з послідовність чисел через пропуск в зростаючому порядку.

 
Задача 2. Task2 PDF Печать E-mail
Добавил(а) Гісь Ігор Володимирович   
03.10.12 09:20

Задача 2. Task2

Перевірити правильність виразу NoNoN =N за заданими чотирма числами a, b,c,d, які підставляємо замість N (N<=100), а о – може бути однією з операцій o(+ - *).

Вхідний файл Task2.in містить рядок з трьох цілих чисел.

Вихідний файл Task2.out містить рядок з відповіддю у вигляді YES або NO.

 
Задача 1. Task1 PDF Печать E-mail
Добавил(а) Гісь Ігор Володимирович   
03.10.12 09:19

Задача 1. Task1

Обчислити суму значень виразів виду NoNoN. Де N (|N|<=100) одне з трьох заданих чисел, о одна з трьох операцій (+,-,*).

Вхідний файл Task1.in містить рядок з трьох цілих чисел.

Вихідний файл Task1.out містить рядок з шуканим результатом.

Последнее обновление 24.10.12 11:24
 
Готуємось до олімпіадаи з інформатики - блок задач 1 PDF Печать E-mail
Добавил(а) Гісь Ігор Володимирович   
03.10.12 08:48

Задача 1. «Одиниці»

Умова. Дано ціле число I записане в десятковій системі числення.

Завдання. Написати програму ONE.*, яка порахує кількість одиниць в його двійковому записі.

Вхідні дані. Вхідний текстовий файл ONE.DAT містить в єдиному число I.

Вихідні дані. Вихідний текстовий файл ONE.SOL містить єдине ціле число - кількість одиниць.

 

Приклади файлів

 

ONE.DAT

ONE.SOL

7

3

 

 

 

Задача 2. «Нафтові плями»

Умова. Після аварії на морській нафтовій свердловині в океан вилилося багато нафти. Вона розтеклася по воді, після чого утворилася певна кількість нафтових плям. Для ліквідації наслідків аварії було створено штаб з координації дій. Співробітники штабу зберігають інформацію про плями в комп'ютері у вигляді матриці розмірністю M x N. Комірка матриці містить 0, якщо нафтова пляма в цих координатах відсутня та 1, якщо наявна (2 ≤ M, N ≤ 100). У матриці комірки плям не можуть дотикатися одна до одної ні сторонами, ні кутами.

Приклади файлів

1

0

1

0

0

0

0

1

1

0

1

0

0

0

0

1

0

0

0

1

1

0

1

0

1

OIL.DAT

OIL.SOL

5 5

1 0 1 0 0

0 0 1 1 0

1 0 0 0 0

1 0 0 0 1

1 0 1 0 1

5

1 2

2 1

3 2

 

 

 

 

 

 

 

 

Завдання. Для полегшення ліквідації наслідків аварії потрібно написати програму OIL.*, яка знаходитиме загальну кількість плям та кількість плям з однаковою площею.

Вхідні дані. Вхідний текстовий файл OIL.DAT містить в першому рядку два числа M та N, далі слідують M рядків, у кожному по N цілих чисел розділених пропусками - елементи матриці.

Вихідні дані. Вихідний текстовий файл OIL.SOL містить у першому рядку ціле число k - загальну кількість плям, далі у кожному з рядів міститься по два числа, перше - площа плями, друге - їх кількість. Дані посортувати по площах в порядку зростання.

 

Завдання 3. «Ламана»

Ім'я файлу програми: LAMAN.*

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

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

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

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

-          починати з лівого нижнього кута, який знаходиться в початку координат;

-           можна пересуватися вздовж цих прямих;

-           при проходженні через точку  завжди змінювати напрям швидкості на перпендикулярний.

Знайти мінімальну довжину шляху  до верхньої правої точки.

Технічні умови. Програма Laman читає з файлу розміри шоколадної плитки (цілі числа, не більші 10^100000). Числа розділено пропуском. Програма виводить на екран  єдине число - шукану величину.

Приклади файлів

LAMAN.DAT

LAMAN.SOL

2 3

5


 

 

 

Задача 4. Сума дільників

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

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

Нехай х - натуральне число. Назвемо число y його дільником, якщо 1 ≤ у ≤ х і залишок від ділення x на y дорівнює нулю.

Задано число х. Знайдіть суму його дільників.

Формат вхідних даних: перший рядок вхідного файлу містить одне ціле число х (1 ≤ х ≤ 1018). Усі прості дільники числа х не перевищують 1000.

Формат вихідних даних: єдиний рядок вихідного файлу має містити одне число - суму дільників заданого числа х.

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

sum.in

sum.out

12

28

239

240

 

 

Задача 5. Куфічний дирхем

Вхідний файл

dirkhem.in

Вихідний файл

dirkhem.out

Віталій Вікторович завжди був комунікабельною людиною і, відповідно, мав багато друзів. Одного вечора, переглядаючи свою електрону пошту, він був приємно здивований запрошенням на ювілей свого студентського друга Шаміля Ігоровича і одразу ж прийняв позитивне рішення.

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

Скориставшись Інтернетом, Віталій Вікторович визначив всі K міст, де можна придбати дану монету, а також її вартість у кожному із цих міст. Країна, у якій живуть Віталій Вікторович і Шаміль Ігорович, налічує N міст і M двосторонніх автомобільних доріг, кожна з яких з'єднує два різних міста держави. Відомо, що Віталій Вікторович живе в місті A, а Шаміль Ігорович - в місті B. Для кожної дороги Віталій Вікторович обчислив вартість проїзду з урахуванням технічних характеристик свого автомобіля. З метою економії Віталій Вікторович вирішив придбати монету по дорозі із міста A у місто B. Іншими словами, маршрут руху Віталія Вікторовича повинен проходити через місто, у якому він вирішить придбати монету. Однак виявилось, що їхати через місто, у якому монета коштує менш за все, не завжди вигідно, тому що вигравши у вартості монети, можна втратити набагато більше у вартості дороги і навпаки...

Ваше завдання - допомогти Віталію Вікторовичу вибрати оптимальний маршрут і місто Z, де слід придбати монету. Маршрут повинен починатися в місті A, закінчуватися в місті B і проходити через місто Z. Вартість даного маршруту повинна бути мінімальною. Під вартістю маршруту будемо розуміти суму кількості грошей, витрачених на дорогу і вартість монети в місті Z. Нижче наведено приклад для N = 5, M = 7, A = 1, B = 4.

 

 

mal02_10_2012

Рисунок 1.Візуалізація другого прикладу.

Для даного приклада K = 4, вартість монети позначено зверху над кругом, що позначає місто.

Оптимальний маршрут виділено червоним кольором. Для даного прикладу Z = 3.

Вхідні дані:

Перший рядок вхідного файлу містить три цілих числа N, M і K (2 ≤ N ≤ 5000; 1 ≤ M ≤ 100000; 1 ≤ K ≤ N), де N - кількість міст в країні, M - кількість доріг, а K - кількість міст, у яких продається шукана монета. Будемо вважати, що всі міста пронумеровані цілими числами від 1 до N.

Другий рядок вхідного файлу містить два цілих числа A і B (1 ≤ A, B ≤ N; A ≠ B), де A - номер міста, в якому живе Віталій Вікторович, а B - номер міста, в якому живе Шаміль Ігорович.

Третій рядок містить K пар цілих чисел Vi і Сi( 1 ≤ Vi ≤ N; 1 ≤ Сi ≤ 109), де Vi - це номер міста, у якому можна придбати потрібну монету, а Сi - вартість монети у відповідному місті. Відомо, що Vi ≠ Vj, якщо i ≠ j. Всі числа у рядку розділені одиночними пробілами.

Кожен наступний із M рядків містить три числа Xi, Yi, Si (1 ≤ Xi, Yi ≤ N; Xi ≠ Yi; 1 ≤ Si ≤ 105), де Xi і Yi - номери міст, з'єднаних двосторонньою дорогою, а Si - вартість проїзду по даній дорозі. Не існує двох різних доріг, що з'єднують одні і ті ж міста.

Вихідні дані

Єдиний рядок вихідного файлу має містити одне ціле число - мінімальну вартість маршруту. Гарантується, що рішення існує.

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

dirkhem.in

dirkhem.out

Маршрут, город Z

3 3 2

3 1

1 20 2 5

1 2 7

1 3 5

2 3 8

20

{3, 2, 1}

Z = 2

 

5 7 4

1 4

1 100 4 50 3 10 2 55

1 2 10

5 3 42

1 3 30

2 4 50

3 4 70

2 5 24

4 5 21

103

{1, 3, 5, 4}

Z = 3

 

8 7 1

1 6

5 187

1 8 32

8 6 39

5 4 51

1 4 101

2 4 17

3 7 46

2 8 23

440

{1, 8, 2, 4, 5, 4, 2, 8, 6}

Z = 5

 

 

Последнее обновление 03.10.12 08:56
 
Тематика занять 2012-2013 PDF Печать E-mail
Добавил(а) Гісь Ігор Володимирович   
03.10.12 08:43

Орієнтовний тематичний план заочної школи обдарованих учнів з інформатики

«Школа олімпійського резерву»

Перший рік навчання

Другий рік навчання

1 Основні поняття мови програмування

2 Логіка мови програмування

3 Організація циклів

4 Функції.  Формальні та фактичні параметри

5 Масиви.

6 Масиви символів, рядкові величини.

7 Рекурсивні функції.

8 Використання множин.

10  Робота з файлами даних.

11 Структури даних. Записи.

1. Геометрія

Відрізок Пряма Трикутник Багатокутник. Коло

2. Довга арифметика

Подання довгих чисел. Порівняння довгих чисел

Арифметичні операції із довгими числами.

Алгоритм добування квадратного кореня із довгого числа

3. Комбінаторні алгоритми

Поняття комбінаторних алгоритмів

Генерація комбінаторних об'єктів

4. Перебір варіантів

Перебір. Методи оптимізації перебору.

Метод меж і гілок

5. Динамічне програмування

Принцип оптимальності. Класичні задачі динамічного програмування.

Побудова динамічних таблиць проміжних результатів

Приклади задач на лінійну динаміку. Двомірна динаміка.

6. Жадібні алгоритми

Евристичні алгоритми. Принцип «жадібності»

Приклади задач

7. Структури даних

Структура даних: запис, лінійний список, стек, черга, дек.

Дерева. Впорядковане дерево. Обхід дерева. Додавання / видалення елемента.

Двійкові дерева, дерево пошуку. Обхід двійкового дерева. Пошук елемента у дереві пошуку.

Характеристики купи. Задачі на використання структур даних.

8. Обробка тексту

Функції обробки тексту. По символьна обробка тексту.

Пошук заданого підрядка в тексті. Алгоритм Бойєра-Мура.

Використання хеш-функції  для пошуку довільного підрядка у рядку

Рекурсивний синтаксичний аналіз виразів із дужками.

9. Алгоритми на графах

Графи та способи їх представлення.

Способи обходу графа: обхід в ширину та обхід в глибину

Алгоритми на основі обходів графа

Побудова кістякового дерева мінімальної ваги

Найкоротший шлях

Задачі на знаходження найкоротших шляхів.

Пошук компонентів зв'язності

Курс для факультативних занять і підготовки до олімпіад учнів 7-9 класів «Основи програмування» (авт. С.Д. Вапнічний, В.В. Зубик, В.А. Ребрина).

 


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

Статистика

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

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

Нет