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

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

Школа олімпійського резерву з інформатики
Заняття 07.10.2015 PDF Печать E-mail
Добавил(а) Administrator   
15.01.16 21:03

Турнір Базові структури алгоритмів http://134.249.159.199/cgi-bin/new-client?contest_id=23
Логін school1-school10. Пароль 1.
Зауваження.

Структура програми

#include "iostream"
#include <math.h>
using namespace std;
int main()
{
int a,b;
double c;
cin>>a>>b;
c=a/b;
cout.precision(2);
cout<<fixed<<c<<endl;
} Заокруглення
double r;
cout.precision(2);
cout<<fixed<<r<<endl;


Робота з файлами

#include "fstream"
using namespace std;

ifstream cin("input.txt");
ofstream cout("output.txt");

Турнір Методика складання алгоритмів http://134.249.159.199/cgi-bin/new-client?contest_id=24
Логін school1-school10. Пароль 1.
Зауваження.
Тематика задач:
Довга арифметика
Системачислення
Сортування, пошук
Перебір
Бінарні дерева
Графи (пошук, жадібні, динамічне)
Обчислювальна геометрія

Всеукраїнськiй олімпіадi з інформатики NetOI-2015 (http://www.olymp.vinnica.ua/


Задача Розв’язок
Задача DEMO_A
         На площині задано координати двох відрізків AB і CD. Знайти спільну частину проекцій цих відрізків на вісь абсцис. 

Вхідні дані 
         Ви вводите з клавіатури 8 цілих чисел - координати точок  A, B, C, D. Кожне число не перевищує за абсолютною величиною 1000. 

Вихідні дані
         Ви виводите на екран одне число - спільну частину проекцій. Якщо спільна частина - порожня множина, вивести -1, якщо це одна точка - вивести 0. 

Приклад вхідних та вихідних даних 
Вхід: 2 2 7 5 3 4 8 1 
Вихід: 4 #include <iostream>

using namespace std;

int main()
{int x1,y1,x2,y2,x3,y3,x4,y4;
cin>>x1>>y1;
cin>>x2>>y2;
cin>>x3>>y3;
cin>>x4>>y4;
int x20=max(x1,x2);
int x10=min(x1,x2);
int x40=max(x3,x4);
int x30=min(x3,x4);

int v=min(x20,x40)-max(x30,x10);
if (v>=0)cout << v << endl; else cout<<-1;
return 0;
}
Задача DEMO_B
          Скільки натуральних чисел виду 2a3b5ca,b,c - невід'ємні цілі числа) належать відрізку [M;N]? 

Вхідні дані
         Ви вводите з клавіатури 2 цілих числа M та N. Кожне з чисел не перевищує за абсолютною величиною 10000.

Вихідні дані 
         Ви виводите на екран одне число - шукану кількість чисел. 

Приклад вхідних та вихідних даних 
Вхід: 10 20 
Вихід: 6 
#include <iostream>
using namespace std;
int main()
{long long int n,m,temp;
int k=0;
cin>>n>>m;
for(int i=n;i<=m;i++)
{
temp=i;
while (temp%2==0) temp=temp/2;
while (temp%3==0) temp=temp/3;
while (temp%5==0) temp=temp/5;
if (temp==1) k++;
}
cout << k << endl;
return 0;
}
Задача DEMO_C
         Дана послідовність N цілих чисел. Знайти найменший додатній елемент цієї послідовності. 

Вхідні дані 
         Ви вводите з клавіатури кількість чисел N та N цілих чисел - елементів цієї послідовності. Число N не перевищує 10000, кожний елемент послідовності не перевищує за абсолютною величиною 1000. 

Вихідні дані 
         Ви виводите на екран одне число - шуканий елемент послідовності. Якщо у послідовності немає додатніх елементів - вивести 0. 

Приклад вхідних та вихідних даних 
Вхід: 7 -4 4 -7 3 0 8 2 
Вихід: 2 
#include <iostream>

using namespace std;

int main()
{long long int n,minn;
int a[100000];
cin>>n;
for(int i=1;i<=n;i++) cin>>a[i];
minn=2000;
for(int i=1;i<=n;i++)
if(a[i]<minn && a[i]>0) minn=a[i];

if(minn==2000) cout << 0 << endl; else cout << minn << endl;
return 0;
}
Задача DEMO_D
         Задано натуральне число N. Знайти найменше та найбільше число, яке складається з тих самих цифр та у такій самій кількості, що і N. 

Вхідні дані 
         Ви вводите з клавіатури число N (1£ N £2000000000). 

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

Приклад вхідних та вихідних даних 
Вхід: 7051 
Вихід: 1057 7510 
#include <iostream>
#include <string.h>
#include <string>
using namespace std;

int main()
{
char *n=new char[200000000];

cin>>n;
for(int i=0;i<strlen(n)-1;i++)
for(int j=0;j<strlen(n)-1;j++)
if(n[j]>n[j+1])swap(n[j],n[j+1]);
int k=0;
while(n[k]=='0')k++;
swap(n[0],n[k]);
cout << n << " ";
for(int i=0;i<strlen(n)-1;i++)
for(int j=0;j<strlen(n)-1;j++)
if(n[j]<n[j+1])swap(n[j],n[j+1]);
cout << n << endl;
return 0;
}
Задача DEMO_E

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

Вхідні дані 
         Ви вводите з клавіатури заданий рядок, довжина якого не перевищує 255 символів. 

Вихідні дані 
         Ви виводите на екран шуканий рядок. 

Приклад вхідних та вихідних даних 
Вхід: Ф11р88н 
Вихід: 1188 
#include <iostream>
#include <string.h>
#include <string>
using namespace std;

int main()
{
char *n=new char[200000000];

cin>>n;
for(int j=0;j<strlen(n);j++)
if(n[j]>='0'&&n[j]<='9')cout<<n[j];
cout << endl;
return 0;
}
Задача DEMO_F

         Дано K клітин шахової дошки. З'ясувати, чи всі вони одного кольору. 

Вхідні дані 
         Ви вводите з клавіатури кількість контрольних прикладів, потім число К - кількість клітин шахової дошки,а у наступних К рядках - координати клітин (натуральні числа, не більші 8). 

Вихідні дані 
         Ви виводите на екран для кожного приклада 1, якщо всі клітини одного кольору і 0, якщо це не так. 

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

Вхід: 3
 
3  
1 2
8 1
8 5
2  
1 1
1 2
2  
1 1
2 2

Вихід: 101 
#include <iostream>

using namespace std;

int main()
{long long int n,k,f,a,b,black,white;
int r[10000];
cin>>n;
for(int i=1;i<=n;i++){
cin>>k;

white=0;black=0;
for(int j=1;j<=k;j++)
{
cin>>a>>b;
if ((a%2==0 && b%2==0 )|| (a%2==1 && b%2==1 )) black++; else white++;

}
if (white==k || black==k)r[i]=1;else r[i]=0;
}
for(int i=1;i<=n;i++)cout<<r[i];
cout << endl;
return 0;
}

Додатково
ІІ етап Всеукраїнської учнівської олімпіади з інформатики (м.Луцьк) 2014-2015н.р. - http://134.249.159.199/cgi-bin/new-client?contest_id=21
Тренувальний турнір до Всеукраїнської учнівської олімпіади з інформатики (м.Луцьк) 2014-2015н.р. - http://134.249.159.199/cgi-bin/new-client?contest_id=22

 
Заняття 13 (30.11.2016) PDF Печать E-mail
Добавил(а) Administrator   
06.12.16 16:09

Функції для опрацювання рядків

strlеn(<рядок>) — визначає фактичну кількість символів у  рядку, застосовується у виразах;

strcat(rl, r2) - команда з'єднання рядків г1, г2 в один ря­док, результат присвоює змінній г1;

strncat(r1, г2, n) - до змінної г1 додає перших n символів рядка г2, команда;

strcpy(r1, r2) - копіює символи з рядка г2 в рядок г1, команда;

strncpy(r1, r2, n) — копіює перших n символів рядка г2 в рядок r1, команда;

strchr(r1, <символ>) - визначає перше входження деякого символу у рядок r1 так: повертає рядок, який починається від першого входження заданого символу до кінця рядка r1, застосовується у виразах;

strrchr(r1, <символ>) - визначає останнє входження зада­ного символу у рядок, застосовується у виразах;

strspn(r1, r2) — визначає номер першого символу, який входить у рядок г1, але не входить

у рядок г2, застосовується у виразах

strstr(r1, r2) - визначає в рядку г1 підрядок, що починаєть­ся з першого входження рядка г2 у рядок г1, засто­совується у виразах;

strtok(r1, r2) - визначає частину рядка г1, яка закінчується перед першим однаковим символом рядків г1 та г2;

strnset(r1, <символ>, n) - вставляє n разів заданий символ перед рядком r1, застосовується у виразах;

strupr(rl) - перетворює усі малі літери рядка у великі;

strlwr(rt) - перетворює усі великі літери рядка у малі;

strrev(rl) - записує рядок у зворотному порядку.

strcmp(s1,s2) -            порівнює рядок s1 з рядком s2 і повертає результат типу int: 0 – якщо рядки однакові, >0 – якщо s1<s2,  <0  — якщо s1>s2 з врахуванням регістру.

cin.getline(str,sizeof(str))- Зчитування рядка з пропусками (тип char)

Застосування функцій

Результат

 

Lviv = "НУ Львівська політехніка"

n = strlen(Lviv)

n = 21

strcat(Un, Lviv)

Un = "НУ Львівська політехніка"

strncat(Un, Lviv, 10)

r1 = "НУ Львівська"

strcpy(r1, Lviv)

r1 = "Львівська Політехніка"

strncpy(r1, Lviv, 10)

r1 = "Львівська"

p = strchr(Lviv, 'П')

p = "політехніка"

p = strrchr(Lviv, Ї)

p = "іка"

n = strspn(Lviv, "Львів")

n = 5

p = strstr(Lviv, "теж")

p = "техніка"

p = strtok(Lviv, "кс")

p = "Львів"

p = strnset(Lviv, 'x', 10)

p = "ххххххххххполітехніка"

p = strupr("I Love You")

p = "і love you"

p = strlwr("I Love You")

p = "I LOVE YOU"

p = strrev('тexнiкa")

p = "акінхет"

Практичні завдання

1. Підрахувати кількість цифр в натуральному числі.

#include "string.h"

int main()

{char n;

cin>>n;

cout<<strlen(n);}

2. Вивести число з п’яти (n) цифр введене з клавіатури в зворотному порядку.

3. Підрахувати кількість входження заданого символу в рядок.

4. Знайти і замінити заданий символ на інший в рядку.


 

Олімпіадні задачі

Задача1. ACMWorldFinals

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

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

Дехто з вас, мабуть, знає, що кожного року проводиться чемпіонат світу з програмування серед студентів. У фінал цього змагання проходять близько 80 команд з усього світу.

Кожна команда складається з трьох чоловік і має назву. Напишіть програму, яка по короткій назві команди і прізвищах її учасників, формує повну назву команди.

Повна назва команди складається з короткої назви команди і списку прізвищ її учасників. Прізвища учасників у списку мають бути впорядковані за абеткою і відділені одне від іншого комами. Назва команди від прізвищ учасників має бути відділена двокрапкою. Після кожного розділового знаку має бути рівно один пробіл. 

Формат вхідних даних: вхідний файл містить рівно 4 рядки. Перший рядок містить назву команди. Кожен із наступних трьох рядків містить прізвище одного із членів команди. Довжини рядків не перевищують 50 символів.

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

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

acm.in

acm.out

Dream Team

Knuth

Dijkstra

Cormen

Dream Team: Cormen, Dijkstra, Knuth

Задача 3. Дужки.

Перевірити в виразі правильність розставлення дужок. Вивести повідомлення (Yes|No).

Задача 4.Вираз

Обчислити вираз, який містить операції( +,-,*,/), цілі числа (2, -5), дужки.

5  - Неуважність

Степан вдало пройшов співбесіду і ось уже як чотири місяці працює на одній із самих престижних ІТ компаній. Прийшов час здавати проект менеджеру і Степан, як істинний студент, все виконує у останню ніч перед здачею. Набирає текст Степан звичайно дуже швидко, але неуважно. От і цього разу останню частину тексту він набрав не звернувши уваги, що випадково натиснув клавішу caps lock. Таким чином великі букви були набрані маленькими, а маленькі великими. Інші символи він набрав вірно. Степан настільки стомився, що немає сил виправити помилки, і він вирішив кілька годин поспати. Допоможіть Степану, доки він спить, напишіть програму, яка виправляє неуважно набраний текст.

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

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

Вхідні дані розміщені у файліtext.in

Результат роботи знаходиться у файліtext.out

sCHOOL
School

6 - Арифметика

Молодший брат Степана Мишко навчається у першому класі. Він дуже допитливий і постійно дістає Степана запитаннями: А скільки? А чому? Сьогоднішній день не виключення. Мишко каліграфічно виписує цифри в ряд і запитує: А скільки різних цифр у записі цього числа. На перші приклади Степан швидко знаходив відповідь. Але Мишко чим далі, тим більші числа записував. Це стало для Степана проблемою. Допоможіть Степану, напишіть програму, яка визначає, кількість різних цифр у числі Мишка.

Формат вхідних даних: перший рядок вхідного файлу містить одне ціле число N (1 ≤ N ≤ 101000), записане Мишком.

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

Вхідні дані розміщені у файліcount.in

Результат роботи знаходиться у файліcount.out

1233
3

Домашнє завдання

Повторити операції з масивом.

 
1. Задача river PDF Печать E-mail
Добавил(а) Гісь   
18.11.10 13:46

 

1. Задача river                (20 балів) Алгоритм

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

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

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

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

Між двома королівствами Читанія та Писанія протікає річка Пряма, яка тече або з Півночі на Південь, або з Заходу на Схід. Король Писанії вирішив завоювати Читанію. Для нападу необхідно збудувати переправу.

Де розпочинати будівництво, якщо король хоче, щоб всі війська, що розташовані в N (1<=N<=100) гарнізонах, могли якнайшвидше зібратися біля переправи? Війська вирушають з пунктів дислокації одночасно і рухаються з однаковою швидкістю по прямій до переправи.

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

Перший рядок вхідного файлу містить чотири цілих числа: a1, a2, b1, b2 ((a1,a2), (b1,b2) – координати двох точок річки Прямої).

Відомо, що або a1=b1 , або a2=b2, -30000<=a1, a2, b1, b2 <=30000.

У другому рядку знаходиться ціле число N – кількість гарнізонів (1<=N<=100).

В наступних N рядках записано по два цілих числа xj та yj – координати гарнізонів

(-30000<= xj,yj<=30000), відокремлених одним пробілом.

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

Ваша програма повинна вивести у вихідний файл рядок, що містить два числа X, Y – координати переправи з точністю до двох знаків після коми, розділених одним пропуском.

Приклад

river.DAT

river.SOL

2 1 2 4

4

3 2

6 3

9 9

8 6

2.00 8.75

 

1. Знайти максимальне та мінімальне значення серед координат точок по x (y).

2. На проміжку від мінімального до максимального значення з кроком 0.01 знайти максимальну відстань від точки на прямій до точок.

3. Серед знайдених максимальних відстаней вибрати мінімальну, знайдена точка на прямій буде розв'язком задачі.

 

                                                                           

 
Заняття 4 (27.09.2017) PDF Печать E-mail
Добавил(а) Administrator   
13.10.17 10:21

Заняття 4. Структура циклу

Повторення

Розгалуження

https://www.e-olymp.com/uk/problems/905 (Трикутник)

https://www.e-olymp.com/uk/problems/918  (Координатна чверть)

https://www.e-olymp.com/uk/problems/911 (Квадратне рівняння)

Структура циклу

https://www.e-olymp.com/uk/problems/910 (Середнє арифметичне додатних)

https://www.e-olymp.com/uk/problems/908 (Ті що діляться на 6)

https://www.e-olymp.com/uk/problems/906 (Добуток цифр)

https://www.e-olymp.com/uk/problems/7338 (Постійна сума)

Масиви

Задачі

Сортування часу - http://www.e-olymp.com/uk/problems/972

Велике сортування - http://www.e-olymp.com/uk/problems/973

Хитре сортування - http://www.e-olymp.com/uk/problems/1462

Багатокутникиhttp://www.e-olymp.com/uk/problems/2987

Два массиваhttp://www.e-olymp.com/uk/problems/2099

Результати олімпіадиhttp://www.e-olymp.com/uk/problems/1962

Фібоначі https://www.e-olymp.com/uk/problems/1378

Теорія

Методи сортування:

1)      Бульбашка

2)      Вибір максимального (мінімального)

3)      Швидке

4)      Вектором

 
Оголошення PDF Печать E-mail
Добавил(а) Administrator   
26.01.11 11:27

Увага!!!

Заняття в школі обдарованих дітей з інформатики в 2011 році розпочнуться 04 лютого 2011 року (п'ятницю) о 15.00.

 


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

Статистика

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

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

Нет