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

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

Школа олімпійського резерву з інформатики
Повторення. Масиви С++ PDF Печать E-mail
Добавил(а) Administrator   
12.09.13 00:00

Робота з масивами C++

Операція з масивом

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

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

Опис

int a[100];

int i, n;//індекс, кількість елементів

int a[100][100];

int i,j, n,m;//індекс, кількість елементів

Введення

cin>>n;

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

cin>>n>>m;

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

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

cin>>a[i][j];

Виведення

for(i=1;i<=n;i++)cout<<a[i]<<” “;

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

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

cout<<a[i][j]<<” “;

Сумування

s=0;

for(i=1;i<=n;i++)s=s+a[i];

s=0;

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

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

s=s+a[i][j];

Пошук

cin>>k;

for(i=1;i<=n;i++) if (a[i]==k) cin<<i;

cin>>k;

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

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

if (a[i][j]==k)

cin<<i<<” “<<j;

Пошук максимального

max=a[1];nmax=1;

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

max=a[1];imax=1;jmax=1;

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

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

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

imax=i;jmax=j;}

Сортування

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

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

if  (a[j]>a[j+1])

{temp=a[j];

a[j]=a[j+1];

a[j+1]=temp;}

Стирання

n=n-1;

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

a[i]=a[i+1];

Вставка

n=n+1;

for(i=n;i>=1;i--)

a[i]=a[i-1];

 

 

 

 
Повторення. Масиви Паскаль PDF Печать E-mail
Добавил(а) Administrator   
11.09.13 00:00

Робота з масивами Pascal

 

Операція з масивом

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

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

Опис

Var a:array[1..100] of integer;

i, n:integer;//індекс, кількість елементів

Var a:array[1..100,1..100] of integer;

i, n,m:integer;//індекс, кількість рядків, стовпців

Введення

readln(n);

for i:=1 to n do read(a[i]);

readln(n);

for i:=1 to n do

for j:=1 to m do

read(a[i,j]);

Виведення

for i:=1 to n do write(a[i],’ ‘);

for i:=1 to n do begin

for j:=1 to m do

write(a[i,j],’ ‘);

writeln;

end;

Сумування

s=0;

for i:=1 to n do s:=s+a[i];

s=0;

for i:=1 to n do

for j:=1 to m do

s:=s+a[i,j];

Пошук

readln(k);

for i:=1 to n do if  a[i]=k then writeln(i);

readln(k);

for i:=1 to n do

for j:=1 to m do

if  a[i,j]=k then

writeln(i,’ ‘,j);

Пошук максимального

max:=a[1];nmax:=1;

for  i:=2 to n do if  a[i]>max then begin max:=a[i];nmax:=i;end;

max:=a[1];nmax:=1;mmax:=1;

for  i:=1 to n do

for j:=1 to m do

if  a[i,j]>max then begin max:=a[i,j];nmax:=i;mmax:=j;

end;

Сортування

for  i:=1 to n -1do

for j:=1 to n -1do

if  a[j]>a[j+1] then begin

temp:=a[j];

a[j]:=a[j+1];

a[j+1]:=temp;

end;

Стирання

n:=n-1;

for  i:=k to n do a[i]:=a[i+1];

Вставка

n:=n+1;

for  i:=n downto k+1 do

a[i]:=a[i-1];

 

 

 

Последнее обновление 09.10.13 21:58
 
Готуємось до олімпіади PDF Печать E-mail
Добавил(а) Administrator   
11.06.13 11:32

Працюйте в системі http://www.e-olimp.com

Отримуйте високий рейтинг

Розв'язуйте задачі з тем

"Геометрія", "Графи", "Динамічне програмування"

Слідкуйте за новинами !!!

 

 
Методика підготовки до олімпіади (навчаємось постійно) PDF Печать E-mail
Добавил(а) Гісь Ігор Володимирович   
11.06.13 11:19

Тематика

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

2. Тематика завдань

3. Системи тестування (ejudge, e-olymp, Contester )

4. Оптимізація розв’язку (прості числа, лічилка)

5. Довга арифметика (факторіал, фібоначі)

6. Повний перебір (лексичний перебір)

7. Обчислювальна геометрія (ліві повороти, площа многокутника)

8. Теорія графів (пошук в глибину, остове дерево, алгоритм флойда)

9. Практикум з розв’язування задач


 

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

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

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

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

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

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

2. Тематика задача олімпіади

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

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

Геометрія

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

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

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

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

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

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

Масиви

Математика

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

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

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

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

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

Сортування

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

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

Теорія ігор

Теорія чисел

3.Системи тестування (ejudge, e-olymp, Contester )

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

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

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

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

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

Назва

Сайт

Система

ejudge

ejudge.ru

Linux

Contester

contester.ru

Windows, Linux

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

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

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

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

4. Оптимізація розв’язку (прості числа, лічилка)

За означенням поодільності на 1 та сааме себе

Решето Ератосфена

program prog1;

{$APPTYPE CONSOLE}

uses

SysUtils,

windows;

var n,i,j:integer;

p:integer;

time:int64;

begin

readln(n);

time:=gettickcount;

for i:=2 to n do

begin

p:=0;

for j:=2 to round(sqrt(i)) do

if i mod j =0 then p:=1;

if p=0 then write(i,' ');

end;

writeln;

time:=gettickcount-time;

writeln(time/1000:0:5);

readln;

end.

program prog2;

{$APPTYPE CONSOLE}

uses

SysUtils,

windows;

var a:array[1..100000000] of integer;

j,k,n,i:integer;

time:int64;

begin

readln(n);

time:=gettickcount;

for i:=1 to n do a[i]:=i;

a[1]:=0;

i:=1;

while i<=n div 2 do begin

while a[i]=0 do i:=i+1;

//writeln(i);readln;

j:=i+a[i];

while j<=n do begin

a[j]:=0; j:=j+a[i];

end;

i:=i+1;

//for k:=1 to n do write(a[k],' ');readln;

end;

for k:=1 to n do

if a[k]<>0 then ///write(a[k],' ');

writeln;

time:=gettickcount-time;

writeln(time/1000:0:5);

readln;

end.

5.Довга арифметика (факторіал, фібоначі)

Цикл

Рекурсія

Довгий факторіал

#include "stdafx.h"

#include "iostream"

using namespace std;

int main()

{int n,i;

long long f=1;

cin>>n;

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

cout<<f<<endl;

return 0;

}

#include "stdafx.h"

#include "iostream"

using namespace std;

long long f(int i)

{

long long t;

if (i==0) t=1;

else t=i*f(i-1);

return t;

}

int main()

{int n;

cin>>n;

cout<<f(n)<<endl;

return 0;

}

#include "stdafx.h"

#include "iostream"

using namespace std;

int main ()

{

int n,i,k,os;

cin>>n;

int a[1000],b[1000];

for (i=0;i<1000;i++)a[i]=0;

for (i=0;i<1000;i++)b[i]=0;

a[0]=1;a[1]=1;b[0]=1;

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

{ os=0;

for ( i=1;i<=a[0];i++)

{b[i]=(a[i]*k+os)%10;

os=(a[i]*k+os)/10;}

while(os>0){b[0]++;b[b[0]]=os%10;os=os/10;}

for ( i=0;i<=b[0];i++)a[i]=b[i];

}

for (i=b[0];i>=1;i--)

cout<<b[i];

cout<<"\n";}

6.Повний перебір (лексичний перебір)

Побудуємо лексичний перебір для довільних  елементів масиву

X=3 2 4 2 4 3 1

а) Рухаємось справа наліво. Крок вперед можна зробити, якщо  наступне число більше за попереднє. Ми зупинилися перед числом 2. Це число потрібно помітити.

X=3  2  4  2 4   3 1

б) Рухаємось справа наліво. Крок вперед можна зробити, якщо   число менше за знайдене число(2). Ми зупинилися перед числом 3. Це число потрібно помітити.

X= 3  2  4  23 1

в) Переставляємо знайдені числа.

X= 3  2  4  32 1

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

X=3  2  4  3 1  2  4

7.Обчислювальна геометрія (ліві повороти, площа многокутника)

Ліві повороти

{Визначення координат векторів}
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;

За заданими кількістю вершин і координатами n-кутника визначити його площу (15 балів).

x[n+1]=x[1]

y[n+1]=y[1]

s=0

для i=1 дo n

s=s+ (x[i]*y[i+1]-x[i+1]*y[i]

s=1/2*abs(s);

8.Теорія графів (пошук в глибину, остове дерево, алгоритм флойда)


Основні поняття теорії графів

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

Неорієнтований граф:

Відкриті Ейлером властивості графа:

1. Число непарних вершин зв'язного графа завжди парне. Неможливо накреслити граф з непарним числом непарних вершин.

2. Якщо  всі  вершини графа парні,  то можна одним розчерком (тобто не відриваючи олівця від паперу) накреслити граф, не проводячи по кожному ребру більше одного разу. При цьому можна починати з будь-якої вершини графа і закінчувати його в тій же вершині.

3. Граф  лише  з  двома непарними вершинами можна накреслити одним розчерком,  при цьому рух потрібно почати в одній точці  з цих вершин і закінчити в другій непарній вершині.

4. Граф з більше ніж  двома  непарними  вершинами  неможливо накреслити одним розчерком.

Гамільтонів шлях проходить через кожну вершину по одному разу (по ребрах проходить декілька разів або жодного)

Ейлеровий шлях – це шлях, який ми проходимо з однієї вершини в іншу через всі ребра тільки один раз.

Задача про туриста (пошук в глибину)

Турбаза мала для ночівлі N місць, з’єднаних стежками. Туристів можна вести в одну сторону. Довжина стежки – одноденний перехід. Пройти і перевірити всі M-денні маршрути, які починаються на базі K.

Орієнтований ненавантажений граф.

n=6; m=3; k=1;


Дано орієнтований ненавантажений граф. N вершин. Знайти всі маршрути довжини m=3, які виходять з вершини з номером k.

Алгоритм Флойда-Уоршелла

З алгоритму Дейкстри зрозуміло, що можна знайти найкоротшу відстань від заданої вершини графа до решти його вершин. А якщо ця інформація потрібна для будь-якої вершини графа? Найперша відповідь, яка спадає на думку: необхідно виконати алгоритм Дейкстри в циклі для всіх вершин графа. Питання лише в часі виконання такого алгоритму, оскільки його оцінка буде О(п3). Однак існує компактніший за записом алгоритм Флойда-Уоршелла, з яким ми зараз і ознайомимося.

Запишемо сам алгоритм:

1. Визначити вершину графа k = 1, через яку буде здійснюватися перерахунок відстані між вершинами і та j.

2. Визначити вершину і = 1.  Визначити вершину j = 1,

3. Якщо величина dj, k + dk,j менша за значення di,j ,то замінити значення di,j на di, k + dk . В іншому разі залишити зна­чення di,j без змін.

4. Якщо j <= п, то перейти до наступної вершини j+ 1 і повер­нутися до п. 4.

5. Якщо i<= п, то перейти до наступної вершини і + 1 і повернутися до п. 3.

6. Якщо k<=n, то перейти до наступної вершини k + 1 і повер­нутися до п. 2,

7. Завершити алгоритм.

У результаті виконання алгоритму елементи di,j будуть міс­тити найкоротшу відстань між відповідними вершинами графа і та j.

Реалізація алгоритму Флойда-Уоршелла мовою Pascal буде такою:

for k := 1 to n do

for і := 1 to n do

for j := 1 to n do

if d[i,k]+d[k,j]<d[i,j] then d[i,j]:=d[i, k]+d[k,j];

4

0 20 3 2

20 0 40 3

3 40 0 4

2 3 4 0

0 5 3 2

5 0 7 3

3 7 0 4

2 3 4 0

0 20 3 2

20 0 40 3

3 40 0 4

2 3 4 0

0 20 3 2

20 0 23 3

3 40 0 4

2 3 4 0

0 20 3 2

20 0 23 3

3 23 0 4

2 3 4 0

0 5 3 2

20 0 23 3

3 23 0 4

2 3 4 0

0 5 3 2

5 0 23 3

3 23 0 4

2 3 4 0

0 5 3 2

5 0 7 3

3 23 0 4

2 3 4 0

0 5 3 2

5 0 7 3

3 7 0 4

2 3 4 0

9.Практикум з розв’язування задач

http://nvk26.lutsk.ua/cgi-bin/new-client?contest_id=3 – ІІ етап (районний) Всеукраїнської олімпіади з інформатики        2012-2013 н.р. (логін user400-user430; пароль 400-430).

http://nvk26.lutsk.ua/cgi-bin/new-client?contest_id=11 – ІІІ етап (обласний) Всеукраїнської олімпіади з інформатики    2012-2013 н.р. (логін user400-user430; пароль 400-430).

http://nvk26.lutsk.ua/cgi-bin/new-client?contest_id=12 – тренувальний тур по підготовці до ІV етапу Всеукраїнської олімпіади з інформатики 2012-2013 н.р. (логін user400-user414; пароль 400-414).

Последнее обновление 11.06.13 11:38
 
10_04_2013 Динамічне програмування PDF Печать E-mail
Добавил(а) Administrator   
30.05.13 15:12

Задача 4 «Зернинки»

Задача 5. Банкомат

Задачі 6. Купування квитків

Читать полностью
 
03_04_2013_ Жадібні алгоритми PDF Печать E-mail
Добавил(а) Administrator   
29.05.13 20:47

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

Задача 1. Центи

Задача 2. Кінцевий результат

Задача 3 Знижки

Читать полностью
 
Задачі ІІІ етапу Всеукраїнської олімпіади з інформатики PDF Печать E-mail
Добавил(а) Administrator   
06.02.13 14:22

турнір за задачами обласної олімпіади є тридцять зареєстрованих користувачів user400 ... user430 паролі числа 400 ... 430 відповідно


Завдання 1 туру ІІІ (обласного) етапу Всеукраїнської олімпіади з інформатики

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

Ім'я файлу, який містить вхідні дані:

text.in

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

text.out

Обмеження часу:

100 мс

Обмеження пам'яті:

128 M

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

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

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

Приклади

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

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

sCHOOL
School

B - День святого Валентина

Ім'я файлу, який містить вхідні дані:

holy.in

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

holy.out

Обмеження часу:

500 мс

Обмеження пам'яті:

128 M

Скоро день святого Валентина і, Степану як великому прихильнику даного свята, доручили вибрати кульки для прикраси зали. Профорг університету, де навчається Степан, веде строгий перелік усіх кульок, згідно якому в наявності є N однокольорових (що поробиш – бідні студенти) кульок, діаметр i-ї кульки (1 ≤ i ≤ N) дорівнює Di міліметрів. Згідно новим вимогам профкому, залу необхідно прикрасити не менше ніж K кульками. Оскільки профоргу університету не подобається свято закоханих, то вона ввела своє поняття – так званий показник некрасивості – рівний максимально можливому числу Di – Dj при 1 ≤ i, j ≤ M, де M – кількість кульок для зали, а Di – їх діаметр. Допоможіть Степану із N іграшок вибрати М (M ≥ K) так, щоб для вибраних M кульок показник некрасивості був мінімальним.

Формат вхідних даних: перший рядок вхідного файлу містить два натуральних числа N (2 ≤ N ≤ 100 000) і K (2 ≤ K ≤ N) відповідно. Другий рядок містить N цілих чисел Di (1 ≤ Di ≤ 109) – діаметр i-ї кульки.

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

Пояснення: Приклад 1 - Існує кілька різних варіантів вибору. Степан може вибрати, наприклад, 6 кульок: 3, 5, 6, 4, 7 і 8
Приклад 2- Степан вибере 4 кульки: 1, 5, 3 і 6.

Приклади

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

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

8 5
10 20 10 20 10 10 20 20
10
6 4
21 12 17 28 16 21
5


C - Степан і Пари

Ім'я файлу, який містить вхідні дані:

pair.in

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

pair.out

Обмеження часу:

1 с

Обмеження пам'яті:

128 M

Останнім часом Степан дуже цікавиться парами чисел, а крім пар чисел його цікавить найбільший спільний дільник пари чисел, позначимо його як НСД(x, y). Зараз у Степана є ціле число n і його цікавить така інформація: скільки існує пар цілих чисел (i,j), таких що 1 ≤ i, j ≤ n і виконується рівність i = НСД(i, j). Допоможіть йому у вирішенні нелегкої задачі.

Формат вхідних даних: у першому рядку дано ціле число n (1 ≤ n ≤ 106).

Формат вихідних даних: єдиний рядок має містити відповідь на задачу.

Зауваження: У першому прикладі підходящою парою є пара (1, 1), так як НСД(1, 1) = 1.
У другому прикладі підходять 8 пар чисел: (1, 1), (1, 2), (1, 3), (1, 4), (2, 2), (2, 4), (3, 3), (4, 4).

Приклади

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

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

1
1
4
8
10
27

D - Спадок Степана

Ім'я файлу, який містить вхідні дані:

legacy.in

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

legacy.out

Обмеження часу:

2 с

Обмеження пам'яті:

128 M

Степан отримав у спадок від дідуся стоянку з N місць, пронумерованих від 1 до N. Стоянка розбита на дві частини. Перші M місць знаходяться з лівого боку, а інші N - M місць з правого. Кожного дня N жителів цього району паркують свої автомобілі на стоянці Степана. Відомо, що перший житель приходить раніше усіх, потім другий, і так далі, тобто k-й приходить k-м. Також для кожного жителя i відомо, скільки він буде платити, якщо його машину поставлять на j-е місце. Степан придбав розподільник місць, який кожному автомобілю, що приїздить вказує, на який бік паркуватись, після чого автомобіль паркується на мінімальне за номером вільне місце відповідного боку. При цьому Степан вирішив зекономити і не придбав програмне забезпечення для розподільника, тому він працює не оптимально. Степан просить Вас написати програму для цього розподільника, яка максимізує доходи Степана.

Формат вхідних даних: у першому рядку записані два цілих числа N (2 ≤ N ≤ 1000) і M (1 ≤ M < N) – загальна кількість місць на стоянці і кількість місць з лівого боку відповідно. У кожному із наступних N рядків записано по N цілих додатних чисел. j-е число i-го рядка означає, скільки буде платити i-ий житель за місце з номером j на цій стоянці. Кожне з цих чисел не перевищує 106.

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

Зауваження: Не менш чим у 50% тестів N ≤ 30.

Приклади

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

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

2 1
3 2
6 4
8
4 1
4 3 1 1
3 1 1 1
1 1 4 1
1 1 1 2
12

E- Конфетна проблема Степана

Ім'я файлу, який містить вхідні дані:

problem.in

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

problem.out

Обмеження часу:

500 мс

Обмеження пам'яті:

128 M

Степан закохався і вирішив привернути увагу дівчини великою коробкою цукерок. За порадою друзів він поїхав на саму відому кондитерську фабрику ShenRo і дізнався, що великі коробки цукерок мають трикутну форму. Цукерки в цих коробках розташовуються у кілька рядів. У першому ряду знаходиться одна цукерка, у другому – дві, у третьому – три цукерки і так далі. На фабриці випускаються коробки цукерок з любим числом рядів у межах від 1 до N. Степан хоче купити одну із таких коробок. Але є одна проблема: його дівчина засмутиться, якщо кількість цукерок у коробці не буде ділитись націло на M, тому що у цьому випадку комусь із друзів дівчини дістанеться більше цукерок, чим іншим, або ж якісь цукерки залишаться лишніми. Тому Степан вирішив, що число цукерок у коробці має обов’язково ділитись націло на M.

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

Вам необхідно по заданих числах N і M знайти число способів вибору коробки цукерок із множини коробок з кількістю рядів від 1 до N. Способи вважаються різними, якщо їм відповідають коробки з різною кількістю рядів цукерок.

Формат вхідних даних: перший рядок вхідного файлу містить два цілих числа N - максимальна кількість рядів цукерок у коробці і M – кількість друзів дівчини Степана (1 ≤ N, M ≤ 2*109) відповідно.

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

Оцінювання: N, M ≤ 1000 – не менше 35 балів, N, M ≤ 105 – не менше 55 балів.

Приклади

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

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

20 10
4
53 199
0
5705 145
157

 

Завдання 2 туру ІІІ (обласного) етапу Всеукраїнської олімпіади з інформатики

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

Ім'я файлу, який містить вхідні дані:

count.in

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

count.out

Обмеження часу:

100 мс

Обмеження пам'яті:

128 M

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

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

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

Приклади

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

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

1233
3

B- Степан і сірники

Ім'я файлу, який містить вхідні дані:

matches.in

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

matches.out

Обмеження часу:

100 мс

Обмеження пам'яті:

128 M

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

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

Формат вхідних даних: перший рядок вхідного файлу містить одне ціле число N (1 ≤ N ≤ 100), яке представляє кількість наборів. Далі йдуть N рядків, кожен з яких містить у собі опис набору сірників - дванадцять цілих додатніх чисел не перевищують 109.

Формат вихідних даних: вихідний файл має містити N рядків. Для кожного набору сірників виведіть “yes”, якщо з нього можливо склеїти каркас паралелепіпеда, і “no” в іншому випадку.

Приклади

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

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

2
1 1 1 1 2 2 2 2 3 3 3 3
1 1 1 1 2 2 2 2 3 3 3 4
yes
no


C - Задача від Степана

Ім'я файлу, який містить вхідні дані:

task.in

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

task.out

Обмеження часу:

750 мс

Обмеження пам'яті:

128 M

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

Наприклад, прямокутник зі сторонами 1 і 10 можна повністю накрити прямокутником 10 і 3, але не можна накрити прямокутником зі сторонами 9 і 9. Прямокутники зі сторонами 10 і 3, а також зі сторонами 9 і 9 накрити не можна, відповідно в наборі із цих трьох прямокутників тільки один маленький. Напишіть програму, яка вирішить згадану Степаном задачу – визначить кількість маленьких прямокутників у даному наборі.

Формат вхідних даних: перший рядок вхідного файлу містить одне ціле число N (2 ≤ N ≤ 200000). У кожному з наступних N рядків міститься два цілих додатних числа – розміри одного прямокутника. Усі розміри не перевищують 1000000. Серед даних прямокутників немає однакових.

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

Приклади

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

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

3
1 10
9 9
10 3
1
4
1 7
2 6
3 5
4 4
0

D - Штрафи

Ім'я файлу, який містить вхідні дані:

penalty.in

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

penalty.out

Обмеження часу:

500 мс

Обмеження пам'яті:

128 M

Степан нещодавно купив автомобіль, але водійські права ще не отримав. В зв’язку з цим він не має права на ньому їздити. Але його дружина вже спланувала вихідні, і поїздка до столиці входить в ці плани. Недовго думаючи, Степан знайшов вихід. Відомо, що ДАІ стоять не на всіх дорогах, а лише на тих, які обминути не можна, тому що так вони спіймають більше правопорушників. Відомо, що в країні Степана N міст, і вони з’єднані M дорогами. Зрозуміло, ніякі дві дороги не з’єднують одну й ту саму пару міст (в країні ж розумні люди працюють). Степан живе в місті А, а столиця знаходиться в місті 1. За відсутність водійських прав штраф складає 1000 карбованців. Скажіть, скільки в нього має бути при собі грошей, щоб він міг виплатити всі штрафи.

Формат вхідних даних: Перший рядок містить два числа N, M (2 ≤ N ≤ 105 , 1 ≤ M ≤ 105). Інші М рядків містять два числа Xi і Yi, які описують дорогу між містом Xi і містом Yi. В останньому рядку написано число A (2 ≤ A ≤ N) – місто в якому живе Степан.

Формат вихідних даних: Виведіть в одному рядку єдине число – кількість карбованців які Степан має мати при собі.

Приклади

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

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

6 7
1 2 
2 3
3 1
3 4
4 5
4 6
5 6
6
1000

E - Ремонт

Ім'я файлу, який містить вхідні дані:

repair.in

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

repair.out

Обмеження часу:

1 с

Обмеження пам'яті:

64 M

Степан придбав нову квартиру і до приїзду батьків вирішив поклеїти шпалери. На перший погляд все просто, але, коли він приступив до роботи, виявилась невелика проблема – необхідно вирівнювати малюнки на сусідніх полосах шпалер. Як визнаний програміст, Степан сформулював задачу таким чином. Кожну полосу шпалер можна описати її частиною – прямокутником довжиною N і шириною M (щоб отримати повну полосу, цей прямокутник можна багато разів домалювати до самого себе справа і зліва). Для простоти подумки поділимо цей прямокутник на рівні клітинки так, щоб утворилось N рядків і М стовпців. Щоб було ще простіше, рисунок на шпалерах позначимо символами ”.” і ”*” (крапка і зірочка), по одному символу в кожній клітинці.

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

Формат вхідних даних: перший рядок вхідного файлу містить два цілих числа N і M(1 ≤ N ≤ 20, 1 ≤ M ≤ 100000). Наступні N рядків містять по М символів кожна – опис першої полоси шпалер. Наступні N рядків містять по М символів кожна – опис другої полоси шпалер. Кожен рядок опису шпалер містить тільки символи ”.” і ”*”.

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

Приклади

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

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

2 5
.*.*.
*.*.*
*.*..
.*.**
1
1 5
***..
*..**
2

 
Тренувальний тур до олімпіади PDF Печать E-mail
Добавил(а) Administrator   
30.01.13 13:50


Ejudge-2013.docx  - скачати

NN

User login

User name

Password

Точка входу

130

VOLN130

VOLN130

7nz5cvqB

http://ejudge.sumdu.edu.ua/cgi-bin/new-client?contest_id=286

131

VOLN131

VOLN131

*GN2v*DP

http://ejudge.sumdu.edu.ua/cgi-bin/new-client?contest_id=286

132

VOLN132

VOLN132

c6JXCnzX

http://ejudge.sumdu.edu.ua/cgi-bin/new-client?contest_id=286

133

VOLN133

VOLN133

FA5qjk5B

http://ejudge.sumdu.edu.ua/cgi-bin/new-client?contest_id=286

134

VOLN134

VOLN134

igYSBpbE

http://ejudge.sumdu.edu.ua/cgi-bin/new-client?contest_id=286

135

VOLN135

VOLN135

MVp@cNjX

http://ejudge.sumdu.edu.ua/cgi-bin/new-client?contest_id=286

136

VOLN136

VOLN136

+Cw!MyVX

http://ejudge.sumdu.edu.ua/cgi-bin/new-client?contest_id=286

137

VOLN137

VOLN137

22/Mvcxm

http://ejudge.sumdu.edu.ua/cgi-bin/new-client?contest_id=286

138

VOLN138

VOLN138

pR3nJMyW

http://ejudge.sumdu.edu.ua/cgi-bin/new-client?contest_id=286

139

VOLN139

VOLN139

5*wCjBJM

http://ejudge.sumdu.edu.ua/cgi-bin/new-client?contest_id=286

140

VOLN140

VOLN140

5WfNtR^T

http://ejudge.sumdu.edu.ua/cgi-bin/new-client?contest_id=286

141

VOLN141

VOLN141

xvupSqyD

http://ejudge.sumdu.edu.ua/cgi-bin/new-client?contest_id=286

142

VOLN142

VOLN142

ET5BDwcp

http://ejudge.sumdu.edu.ua/cgi-bin/new-client?contest_id=286

143

VOLN143

VOLN143

sJrG6QGy

http://ejudge.sumdu.edu.ua/cgi-bin/new-client?contest_id=286

144

VOLN144

VOLN144

GaA4JiWP

http://ejudge.sumdu.edu.ua/cgi-bin/new-client?contest_id=286

145

VOLN145

VOLN145

5B5ZsjG3

http://ejudge.sumdu.edu.ua/cgi-bin/new-client?contest_id=286

146

VOLN146

VOLN146

phbtsTYg

http://ejudge.sumdu.edu.ua/cgi-bin/new-client?contest_id=286

147

VOLN147

VOLN147

A+PL*CU9

http://ejudge.sumdu.edu.ua/cgi-bin/new-client?contest_id=286

148

VOLN148

VOLN148

/37gDGo!

http://ejudge.sumdu.edu.ua/cgi-bin/new-client?contest_id=286

149

VOLN149

VOLN149

XubvG2ta

http://ejudge.sumdu.edu.ua/cgi-bin/new-client?contest_id=286

150

VOLN150

VOLN150

knzqUqz8

http://ejudge.sumdu.edu.ua/cgi-bin/new-client?contest_id=286

Учасники олімпіади можуть вибирати мову програмування знаступного переліку: Pascal, C або C++. Середовища розробки програм FreePascal 2.4.0 (чи новішої версії), CodeBlocks 10.05 (чи новішої версії), GCC 4.6(чи новішої версії). Для перевірки робіт учасників будуть використані такі версії компіляторів: FPC 2.4, GCC 4.6. У зв’язку із специфікою задач, що не вимагають візуального середовища розробки і помилками викликаними написаннями програм в TurboDelphiExplorer та Visual C++ ці середовища на ІV етапі доступними не будуть.

задача 1. abc, cba, acb,bac,acb,bca

задача 2. НСД різниці координат + 1

задача 3. кексики

задача 4. синтаксичний аналіз виразу (автомати)

задача 5. сортуванння, сума з k+1 до N

задача 6. дільники= парне, непарне

задача 7. дільники= 2, 3 5

задача 8. трикутне число – сума чисел від 1 до N, S=(N-1)/2*N;

 


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

Статистика

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

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

Нет