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

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

Школа олімпійського резерву з інформатики
Заняття11 (16.11.2016) PDF Печать E-mail
Добавил(а) Administrator   
29.11.16 09:41

Готуємось до олімпіади з інформатики – 2016 – 3

Завдання

Програма

1

Задачі -5

Система – Ejudge

Робота з файлами – input.txt, output.txt

#include "fstream"

using namespace std;

ifstream cin("input.txt");

ofstream cout("output.txt");

2

Обчислювальні алгоритми

$1-          Цілі числа та операції – int, longlong, /, %

$1-          Дійсні числа – float, double,  sqrt, pow (math.h)

Задача 1. Час в секундах подати гг хх сс

#include <iostream>

using namespace std;

int main()

{ long long t,g,h,s;

cin >>t;

s=t%60;

t=t/60;

h=t%60;

t=t/60;

g=t%60;

    cout << g<<" "<<h<<" "<<s<<endl;

    return 0;

}

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

#include <iostream>

#include <math.h>

using namespace std;

int main()

{ double x1,y1,x2,y2,p,s,r,a,b;

cin >>x1>>y1>>x2>>y2;

a=fabs(x1-x2);

b=fabs(y1-y2);

s=a*b;

p=2*(a+b);

r=sqrt(pow(a,2)+pow(b,2))/2;

cout.precision(3);

cout <<fixed;

cout <<s<<endl;

cout <<p<<endl;

cout <<r<<endl;

    return 0;

}

3

Структура розгалуження і цикулу

Задача 3. Кількість нулів

За даним числу n визначте, якою кількістю нулів закінчується десяткова запис числа n! .

#include "iostream"
using namespace std;
int main()
{

long long n,f;
cin>>n;
if (n<5){cout<<0;}
if (n>=5 && n<10) cout<<1;
if (n>=10 && n<15)cout<<2;
if (n>=15 && n<20)cout<<3;
if (n>=20 && n<25)cout<<4;
if (n>=25 && n<30)cout<<6;
if (n>=30 && n<35)cout<<7;
if (n>=35 && n<40)cout<<8;
if (n>=40 && n<45)cout<<9;
if (n>=45 && n<50)cout<<10;
if (n>=50 && n<55)cout<<12;

}

 

#include "iostream"
using namespace std;
int main()
{
long long n,f,i,d,s;
cin>>n;
 d=1;s=0;
for(i=1;i<=100;i++)
{
        d=d*5;
        s=s+n/d;
}
}       

4

Лінійний масив

Задача 4. Кількість максимальних елементів в масиві

#include <iostream>

#include <math.h>

using namespace std;

int a[10000],n;

int main()

{ int max,nmax,k;

cin >>n;

for (int i=0;i<n;i++) cin>>a[i];

max=a[0];nmax=0;

for (int i=0;i<n;i++)

if(a[i]>max){max=a[i];nmax=i;}

k=0;

for (int i=0;i<n;i++)

if(a[i]==max)k++;

cout <<k<<endl;

    return 0;

}

#include <iostream>

#include <math.h>

using namespace std;

int a[10000],n;

int main()

{ int max,nmax,k,j;

cin >>n;

for (int i=0;i<n;i++) cin>>a[i];

for (int i=0;i<n-1;i++)

    for (int j=0;j<n-1;j++)

if(a[j]>a[j+1])swap(a[j],a[j+1]);

j=n-1;k=1;

while (a[j]==a[j-1] && j>0){k++;j--;}

cout <<k<<endl;

    return 0;

}


 

Задача 5. Домашня робота з математики (100 балів)

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

2 секунди

Максимальний об’єм пам’яті:

256 Мб

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

input.txt

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

output.txt

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

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

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

Формат вхідного файлу

Перший рядок вхідного файлу містить цілі числа n и m — кількість завдань і кількість залежностей між завданнями (1 n 100, 0 m 1000). Другий рядок містить n цілих чисел: t1, t2, . . . , tn. Число ti  означає кількість хвилин, необхідних Сашку для виконання i-го завдання (1 ti 1000). Далі іде m рядків, кожен з яких містить два цілих числа. Числа a и b означають, що

завдання a слід виконати раніше аніж завдання b. Гарантується, що всі завдання можна виконати.

Формат вихідного файлу

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

Наприклад

Вхідні дані

Вихідні дані

5 5

1 2 3 4 5

1 2

5 3

1 3

3 4

2 4

11

В даному прикладі Сашко може не виконувати четверте завдання. Всі інші завдання він виконає за 11 хвилин.

#include "fstream"

using namespace std;

int a[1000],b[1001],c[1001];

ifstream cin("input.txt");

ofstream cout("output.txt");

int main()

{

         long long  n,m,max,nmax,s=0,f2;

         cin>>n>>m;

for (int i=1; i<=n;i++) {cin>>a[i];s=s+a[i];}

for (int i=1; i<=m;i++) cin>>b[i]>>c[i];

int f=1;

while (f)

{max=0;nmax=0;

for (int i=1; i<=n;i++) if (a[i]>max){max=a[i];nmax=i;}

f2=0;

for (int i=1; i<=m;i++)

if(b[i]==nmax)f2=1;

if(f2)a[nmax]=0;  else f=0;

}

cout<<s-max<<endl;

}

5

Прямокутна таблиця

Задача 6. На квадратному аркуші паперу в клітинку розміром NхM клітинок намальовано кілька прямокутників. Кожен прямокутник складається з цілих клітинок, різні прямокутники накладаються один на одного.

Необхідно написати програму, яка рахує площу покриту цими прямокутниками.

Вхідні дані

В першому рядку N, розмір масиву, в наступних n рядків  масиву, в кожному з яких написані через пробіл n елементів масиву: A [елемент I, J] = 1, якщо клітина [I, J] належить будь-якому прямокутника, і A [I, J ] = 0, в іншому випадку.

Вихідні дані

Необхідно вивести єдине число - кількість прямокутників.

#include <iostream>

using namespace std;

 int a[100][100];

int main()

{

int n,m;

cin>>n>>m;

for (int i=0;i<n;i++)

    for (int j=0;j<m;j++)

    cin>>a[i][j];

int k=0;

for (int i=0;i<n;i++)

    for (int j=0;j<m;j++)

    if (a[i][j]==1)k++;

     cout<<k<<endl;

        return 0;

}

Задача 7.  "Прямокутники" На квадратному аркуші паперу в клітинку розміром NхN клітин намальовано кілька прямокутників. Кожен прямокутник складається з цілих клітинок, різні прямокутники не накладаються один на одного і не дотикаються.

Необхідно написати програму, яка рахує число цих прямокутників.

Вхідні дані

В першому рядку N, розмір масиву, в наступних n рядків  масиву, в кожному з яких написані через пробіл n елементів масиву: A [елемент I, J] = 1, якщо клітина [I, J] належить будь-якому прямокутника, і A [I, J ] = 0, в іншому випадку.

Вихідні дані

Необхідно вивести єдине число - кількість прямокутників.

#include <fstream>

using namespace std;

ifstream cin("input.txt");

ofstream cout("output.txt");

    int a[100][100];

int main()

{

int n;

cin>>n;

for (int i=0;i<n;i++)

    for (int j=0;j<n;j++)

    cin>>a[i][j];

int k=0;

for (int i=0;i<n;i++)

    for (int j=0;j<n;j++)

    if (a[i][j]==1 && a[i+1][j]==0 &&a[i][j+1]==0 && a[i+1][j+1]==0)k++;

     cout<<k<<endl;

        return 0;

}

6

Рядки

Задача 8. Підрахувати кількість цифри 0  в рядку

#include <iostream>

#include <string.h>

using namespace std;

 char a[10000];

int main()

{

cin>>a;

int n=strlen(a);

int k=0;

for (int i=0;i<n;i++)

    if(a[i]=='0')k++;

     cout<<k<<endl;

        return 0;

}

Задача 9. В тесті залишити всі голосні букви інші замінити “_” та порахувати їх кількість

#include <fstream>

using namespace std;

ifstream cin("input.txt");

ofstream cout("output.txt");

    char a[1000];

int main()

{

int ka=0, ke=0,ki=0, ko=0, ku=0, ky=0;

while (!cin.eof())

{cin>>a;

   for(int i=0;i<strlen(a);i++)

   {if(a[i]=='a')ka++; else

   if(a[i]=='e')ke++; else

   if(a[i]=='i')ki++;else

   if(a[i]=='o')ko++; else

   if(a[i]=='u')ku++;else

   if(a[i]=='y')ky++;else

   a[i]='_';

   }

   cout<<a<<endl;

}

   cout<<ka<<" "<<ke<<" "<<ki<<" "<<ko<<" "<<ku<<" "<<ky<<endl;

        return 0;

}

 

#include "fstream"

#include "string.h"

#include "string"

using namespace std;

ifstream cin("input.txt");

ofstream cout("output.txt");

string a[1000];

int main()

{int n=0;

int ka=0, ke=0,ki=0, ko=0, ku=0, ky=0;

while (!cin.eof())

{getline(cin,a[n]);

   for(int i=0;i<a[n].length();i++)

   {if(a[n][i]=='a')ka++; else

   if(a[n][i]=='e')ke++; else

   if(a[n][i]=='i')ki++;else

   if(a[n][i]=='o')ko++; else

   if(a[n][i]=='u')ku++;else

   if(a[n][i]=='y')ky++;else

   a[n][i]='_';

   }

   n++;

   }

   for(int i=0;i<n;i++)

    cout<<a[i]<<endl;

   cout<<ka<<" "<<ke<<" "<<ki<<" "<<ko<<" "<<ku<<" "<<ky<<endl;

        return 0;

}

7

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

Задача 10. Квиток

Задача 4. «Квитки» (30 балів)

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

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

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

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

За квитками на прем'єру нового мюзиклу вишикувалася черга з N людей, кожний з яких хоче купити 1 квиток. На всю чергу працювала тільки одна каса, тому продаж квитків йшов дуже повільно, приводячи людей черги у відчай. Найкмітливіші швидко відмітили, що, як правило, декілька квитків в одні руки касир продає швидше, ніж коли ці ж квитки продаються поодинці. Тому вони запропонували декільком людям, які стоять підряд віддавати гроші першому з них, щоб він купив квитки на всіх.

Проте для боротьби із спекулянтами касир продавала не більше 3-х квитків в одні руки, тому домовитися таким чином між собою могли лише 2 або 3 підряд вартих людини.

Відомо, що на продаж i-ій людині з черги одного квитка касир витрачає Ai секунд, на продаж двох квитків — Bi секунд, трьох квитків — Ci секунд. Напишіть програму, яка підрахує мінімальний час, за який могли бути продані квитки для всіх людей черги.

Зверніть увагу, що квитки на групу людей, що об'єдналися, завжди купує перший з них. Також ніхто в цілях прискорення не купує зайвих квитків (тобто квитків, які нікому не потрібні).

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

У вхідному файлі записано спочатку число N — кількість покупців в черзі (1N5000). Далі йде N трійок натуральних чисел Ai, Bi, Ci. Кожне з цих чисел не перевищує 3600. Люди в черзі нумеруються починаючи від каси.

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

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

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

input.txt

output.txt

input.txt

output.txt

5

5 10 15

2 10 15

5 5 5

20 20 1

20 1 1

12

2

3 4 5

1 1 1

4

N=5

i

Ai

Bi

Ci

1

5

10

15

2

2

10

15

3

5

5

5

4

20

20

1

5

20

1

1

D[i]= min ( D[i-1]+Ai,  D[i-2]+ Bi-1,  D[i-3]+ Ci-2 )

D[1]

D[2]

D[3]

D[4]

D[5]

5

7

5

6

12 – відповідь завдання

d[0]= 0;

d[1]= а[1];

d[2]= Мінімальне(а[1]+a[2], b[1]);

Для i від 3 до n  пц

d[i]= Мінімальне(d[i-1]+ а[i],Мінімальне(d[i-2]+ b[i-1], d[i-3]+ с[i-2]));

#include<iostream>

using namespace std;

int main()

{

int n,i,a[5000],b[5000],c[5000],d[5000];

cin>>n;

for(i=1;i<=n;i++) cin>>a[i]>>b[i]>>c[i];

d[0]= 0; d[1]= a[1]; d[2]= min(a[1]+a[2],b[1]);

for(i=3;i<=n;i++) d[i]=min(d[i-1]+a[i],min(d[i-2]+b[i-1],d[i-3]+c[i-2]));

cout<<d[n]<<endl;

}

8

Еврестичні методи

cin>>n;              . . .         cout<<n;

cin>>n;              . . .         cout<<”yes”;

 

9

   

http://134.249.159.199/cgi-bin/new-client?contest_id=23

Логін school2016-1 . . . school2016-10  (пароль - 1)

http://nvk26.lutsk.ua/cgi-bin/new-client?contest_id=24

Логін school2016-1 . . . school2016-10  (пароль - 1)

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

Логін school2016-1 . . . school2016-10  (пароль - 1)

http://134.249.159.199/cgi-bin/new-client?contest_id=22

school1-school10 (пароль - 1)

http://134.249.159.199/cgi-bin/new-client?contest_id=14

Логін school2016-1 . . . school2016-10  (пароль - 1)

Последнее обновление 29.11.16 09:46
 
Заняття 1 (06.09.2017) PDF Печать E-mail
Добавил(а) Гісь І.В.   
15.09.17 09:09

7226 День календаря

Як відомо день програміста припадає на 256 день року, у невисокосний рік це - 13 вересня, а у високосний — 12. Не забудьте привітати своїх колег і наставників.

Аналогічно пропонується розпізнати число та номер місяця, що припадає на день за номером nу невисокосному2014 році.

Вхідні дані

Натуральне число n(1 n ≤365).

Вихідні дані

Число (від 1 до 31) та номер місяця (від 1 до 12), що відповідає дню з номером n.

Вхідні дані

256

Вихідні дані

13 9

193 Сума цифр

Знайти найменше і найбільше N-значні натуральні числа, які мають суму цифр M.

У вхідному файлі числа N і M (1≤N≤100, 1≤M≤9*N). До вихідного файлу потрібно записати два N-значних числа в неспадаючому порядку.

Вхідні дані

3 4

Вихідні дані

103 400

1356 SMS голосування

У фіналі фабрики зірок було проведено SMS голосування для визначення переможців серед Nконкурсантів. Телеглядачі відправляли SMS з номером (число від 1 до N) свого улюбленого виконавця і кількість відповідних SMS склали рейтинг кожного учасника. Всього на головний комп’ютер конкурсу надійшло Mповідомлень SMS. Потрібно скласти програму, яка виведе номери трьох переможців у порядку спадання їх рейтингів та зростання номерів у випадку, якщо рейтинги рівні.

Вхідні дані

У першому рядку записано два числа Nі M(3 100,1 1000000).

У наступному рядку Mчисел, кожне з яких не перевищує N.

Вихідні дані

Три числа - номери переможців записані в один рядок, через пропуск.

Ліміт часу 1 секунда

Ліміт використання пам'яті 64 MiB

Вхідні дані

5 10 1 2 3 4 5 2 1 2 4 2

Вихідні дані

2 1 4

Последнее обновление 22.09.17 08:01
 
ЕТАПИ РОЗВ'ЯЗАННЯ ЗАДАЧ НА КОМП'ЮТЕРІ PDF Печать E-mail
Добавил(а) Administrator   
21.09.11 10:32

ЕТАПИ РОЗВ'ЯЗАННЯ ЗАДАЧ НА КОМП'ЮТЕРІ

 


Перш ніж одержати очікуваний результат роботи програми на  комп'ютері, необхідно виконати досить багато копіткої підготовчої роботи.

1.Постановка задачі. Розв'язування будь-якої задачі починається з ЇЇ постановки, викладеної мовою чітко визначених математичних понять. На першому кроці необхідно добре уявити, в чому саме полягає дана задача, які необхідні початкові дані, яку інформацію вважати результатами розв'язання.

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

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

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

4. Вибір мови програмування. Алгоритм, призначений для виконання на комп'ютері, має бути записаний мовою програмування. Різноманітність існуючих мов програмування потребує від програміста реальної оцінки складності та характеру задачі. Тільки після цього він зможе здійснити оптимальний вибір мови програмування для реалізації поставленої задачі. Враховуючи можливість розбиття всього алгоритму на окремі модулі, для кожного з них вибір мови програмування можна здійснити окремо. Процес розробки програми, як і алгоритму, може здійснюватися за принципом «зверху донизу». Це дозволяє одержати добре структуровану програму, читання і розуміння якої значно полегшене.

5. Складання програми. Цей етап потребує лише знання вибраної мови програмування. Суть його полягає в тому, щоб на основі розроблених алгоритмів і структур даних створити програму для комп'ютера.

6. Компіляція програми. Переведення програми на машинну мову здійснюється за допомогою спеціальних програм — компіляторів. Однією з їх функцій є перевірка відсутності в програмі синтаксичних помилок. Не тіште себе надією, що ваша, навіть найпростіша, програма написана бездоганно. Серед програмістів побутує прислів'я:
«Якщо програма не має помилок, це означає, що у вас поганий компілятор!!!»

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

9. Експлуатація програми. Тепер програму можна тиражувати і пропонувати іншим користувачам, доповнивши її відповідною документацією для користувачів. Документація повинна містити опис виконуваної задачі, опис середовища, в якому може працювати
програма, обмеження на вхідні дані, формат вхідних та вихідних даних. Більшість розглянутих етапів розв'язування задач на комп'ютері виконуються людиною і носять творчий, евристичний характер.

Караванова Т.П., Основи алгоритмізації та програмування. 750 задач з рекомендаціями та прикладами (посібник)

 

 
Матеріали III етапу Всеукраїнської учнівської олімпіади з інформатики PDF Печать E-mail
Добавил(а) Administrator   
19.01.11 05:41

Тести та умови до завдань III етапу Всеукраїнської учнівської олімпіади з інформатики

Последнее обновление 19.01.11 05:53
 
28_11_2012_Тестування задач PDF Печать E-mail
Добавил(а) Гісь Ігор Володимирович   
28.11.12 09:50

Єдиний спосіб вивчати нову мову програмування –

писати на ній програми.
Брайен Керніган

План роботи

1) Тематика вивчення курсу інформатики. Розподіл годин. Історичний аспект. Поглиблене вивчення.

2) Тематика вивчення курсу алгоритмізація і програмування. Базові структури алгоритмів. Методика складання алгоритмів. Візуальне програмування.

3) Олімпіадна інформатика. Правила проведення олімпіад і вимоги до виконання робіт. Аналіз завдань олімпіади.

4) Етапи розв’язування задач з використанням ЕОМ. Умова. Модель. Алгоритм. Програма. Середовище. Тестування.

.

Олімпіадна інформатика

1. Що таке олімпіадна інформатика?

Що потрібне для успішної участі в олімпіадах по інформатиці? Як показує практика, тільки знання мови програмування для цього явно не достатньо. Взагалі, виявляється, що олімпіадні задачі по інформатиці лежать десь на стику математики і програмування. І дуже часто виявляється, що розв’язуючи задачі школярі не тільки вчаться програмувати, але і освоюють нові розділи математики.

2. Як перевіряються розв’язки задач олімпіади

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

3. Апаратне та програмне забезпечення

Учасникам олімпіади можуть вибирати мову програмування с заданого переліку: Pascal, C або C++. Система програмування Free Pascal 2.0 (чи новішої версії), GCC 4.2 (чи новішої версії), Turbo Delphi Explorer, Visual C++ 2008 Express).

4. Завдання олімпіади

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

Основними категоріями олімпіадних задач є:

Геометрія

Графічні задачі

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

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

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

Задачі для початківців

Комбінаторика

Масиви

Математика

Математичне моделювання

Обробка рядків

Послідовності

Рекурсія, перебір

Логічні задачі

Сортування

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

Теорія графів

Теорія ігор

Теорія чисел

Системи тестування

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

http://olymp.sumdu.edu.ua - Веб-ресурс підтримки та проведення шкільних та студентських олімпіад з інформатики

http://www.e-olimp.com.ua/ - Інтернет-портал організаційно-методичного забезпечення дистанційних олімпіад з програмування для обдарованої молоді навчальних закладів України

http://www.olymp.vinnica.ua/ - Центр підтримки та проведення олімпіад школярів з використанням можливостей Internet.

Список тестуючих систем

Назва

Сайт

Система

ejudge

ejudge.ru

Linux

PCMS2

посилання

Windows

Contester

contester.ru

Windows, Linux

Executor

acmtest.ru

Windows

PC2

посилання

Windows, Linux

olympiads.ru

посилання

Windows

DOMjudge

посилання

Linux

dudge

посилання

Кросс-платформенная (Java)

Список ресурсів

· http://vippolabinfo.16mb.com - сайт «Лабораторія інформатики сьогодні», методична підтримки напрямків роботи.

· http://vippoolimp.16mb.com – Волинська учнівська Інтернет олімпіада з програмування.

· http://schoololymp.byethost32.com – заочна школа роботи з обдарованими учнями з інформатики.


Завдання IІ етапу Всеукраїнської учнівської олімпіади

з інформатики 2012-2013 н.р.

Задача 1. «Число» (25 балів)

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

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

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

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

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

Інструкція

1. Попросіть загадати три цифри (обов'язково цифри, а не числа).

2. Потім попросіть його помножити першу загадану цифру на 2 і додати до результату, що вийшов 3. Потім помножити це число на 5.

3. Потім до вже отриманого числа додав другу загадану цифру і помножити суму на 10.

4. До нового числа, що вийшло додайте третю задуману цифру.

5. Попросіть його назвати число, що вийшло.

6. Зробіть вигляд, що ви задумалися (тільки довго не думайте). Тим часом, відніміть від вимовленого вголос числа 150. Вийде, що перша, друга і третя цифри результату є задуманими цифрами гравця.

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

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

INPUT.DAT

OUTPUT.ANS

747

5 9 7

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

Задача 2. «Фігура» (25 балів)

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

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

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

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

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

Вхідні дані. Вхідний текстовий файл містить чотири рядки по чотири цілих числа розділених пропусками, які задають координати початку та кінця чотирьох відрізків (|x,y|≤2147483647).

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

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

Фігура

Пояснення

Пріоритет

INPUT.DAT

OUTPUT.ANS

square

Квадрат

4

0 0 0 4

0 4 4 4

4 4 4 0

4 0 0 0

square

rectangle

Прямокутник

3

trapezoid

Рівнобічна трапеція

2

quadrangle

Чотирикутник

1

Laman

Ламана

0

Завдання 3. «Коло» (25 балів)

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

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

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

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

Дуже талановитий учень вмів від руки малювати ідеальні кола. За перерву він на дошці намалював велику кількість кіл. На початку уроку вчитель попросив учнів класу поміряти радіуси або діаметри кіл дерев’яною лінійкою в сантиметрах.

Вчитель записав в зошит їхні заміри, порахував кількість замірів і попросив талановитого «художника» підрахувати кількість різних кіл, яку він намалював.

Технічні умови. Програма CIRCLE читає з першого рядка файлу кількість замірів N (1≤N≤1000000) та наступного рядка з N натуральних чисел, які задають розмір кіл (не більші 1000000). Числа розділено пропуском. Програма виводить на екран єдине число - шукану величину.

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

INPUT.DAT

OUTPUT.ANS

2

1 3

2

2

1 2

1

Задача 4. «Трикутник» (25 балів)

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

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

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

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

Інший талановитий учень, після вивчення теореми Піфагора, перед наступним уроком намалював на дошці N прямокутних трикутників. Вчитель на початку уроку визначив довжини сторін трикутника дерев’яною лінійкою в сантиметрах і заокругливши до цілого записав числа в зошит. На початку уроку, закривши дошку, продиктував записані числа в довільному порядку та попроси визначити яку кількість прямокутних трикутників побудував «учень Піфагора».

Вхідні дані. Вхідний текстовий файл містить в першому рядку число N (3<=N<=100) , далі слідують 3*N рядків, у кожному одне натуральне число (a<=2147483647).

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

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

INPUT.DAT

OUTPUT.ANS

INPUT.DAT

OUTPUT.ANS

2

13

5

12

4

5

3

2

2

3

4

5

6

7

8

1

Сумарна кількість балів – 100


 


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

Статистика

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

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

Нет