середа, 18 березня 2015 р.

Buratino

(Джерело: http://www.olymp.vinnica.ua/index_ua.php?lng=ua&cid=118)

Задача. Буратіно має лише N золотих монет, які він отримав від Карабаса-Барабаса. Кіт та лисиця розповіли йому, що закопавши гроші на Полі чудес, за кожен урожай можна збирати їх у L разів більше. Для вирощування урожаю необхідно Т повних годин. Скільки монет зможе зібрати Буратіно у разі удачі за M годин (M>=T)? Ті монети, які він закопав – зникають. Кожен раз Буратіно закопує всі наявні монети.  

Технічні умови. Програма Buratino читає з клавітатури числа N, L, T, M одним рядком через пропуск. Програма виводить на екран єдине число число - шукану величину. Всі числа не більші 10000.  

Приклад. 
Введення: 10 2 5 10
Виведення: 40
Розв'язання.
Через кожні T годин кількість монет N збільшиться в L разів. Отже, через M годин кількість монет N збільшиться в L - M\T разів (\ - ділення націло). І буде дорівнювати: N*LM\T, де \ - ділення націло. 
Запишемо алгоритми мовами програмування.

Free Pascal:
Var N, L, T, M : Integer;
Begin
 Read (N, L, T, M);
 Write (N*Round(Exp((M div T)*Ln(L))));
End.

C++:
#include <iostream>
#include <cmath>
using namespace std;
int main(){
 int n, l, t, m;
 cin >> n >> l >> t >> m;
 cout << n*pow((float)l,m/t);
}

вівторок, 17 березня 2015 р.

Petro

(Джерело: http://www.olymp.vinnica.ua/index_ua.php?lng=ua&cid=117)

Задача. Петрик П'яточкін хоче дістати яблуко, яке висить на висоті N (N>=1) метрів. Для цього йому потрібно зв'язати кілька жердин, довжини яких він знає. Таких жердин у нього М (М>=1), кожна має довжину Lі. Яку найменшу кількість жердин йому потрібно зв'язати щоб дістати яблуко? Вважати, що жердини монтуються стик в стик, тобто при зв'язуванні жодний сантиметр жодної жердини не втрачається.

Технічні умови. Програма Petro читає з клавіатури рядок чисел через пропуск: N, M, L1, L2, ..., LM. Програма виводить єдине число - шукану величину. Якщо яблуко дістати неможливо, програма повинна вивести 0.  

Приклади.
Введення: 10 5 1 3 4 3 6
Виведення: 2

Введення: 10 5 1 1 1 1 1
Виведення: 0
Розв'язання.
Після введення даних, будемо шукати найбільшу жердину (Lm) та її номер (Im) і додаватимемо її до зв'язаних жердин (Ld) доки останні не досягнуть потрібної висоти (N).
Запишемо алгоритми мовами програмування.

Free Pascal:
Var N, M, I, J,
    Ld, Lm, Im : Integer;
             L : Array [1..50] Of Integer;
Begin
 Read (N, M);
 For I := 1 To M Do
  Read (L[I]);
 Ld := 0;
 For I := 1 To M Do Begin
  Lm := L[I];
  Im := I;
  For J := I+1 To M Do
   If L[J] > Lm
    Then Begin
     Lm := L[J];
     Im := J;
    End;
  Ld += Lm;
  If Ld >= N
   Then Break;
  L[Im] := L[I];
 End;
 If Ld >= N
  Then Write (I)
  Else Write (0);
End.

C++:
#include <iostream>
using namespace std;
int main(){
 int n, m, i;
 cin >> n >> m;
 int l[m-1], ld=0;
 for (i=0; i<m; i++)
  cin >> l[i];
 for (i=0; i<m; i++) {
  int lm=l[i], im=i;
  for (int j=i+1; j<m; j++)
   if (l[j]>lm)
    lm=l[j], im=j;
    ld+=lm;
    if (ld>=n) break;
    l[im]=l[i];
 }
 if (ld>=n)
  cout << i+1;
  else cout << 0;
}

понеділок, 16 березня 2015 р.

Multik

(Джерело: http://www.olymp.vinnica.ua/index_ua.php?lng=ua&cid=116)


Задача. Заєць із відомого мультфільму втікає від Вовка по сходах довжиною N сходинок. Для того, щоб втекти, Зайцю потрібно сховатись за дверима, які знаходяться на останній сходинці. Вовк не може схопити зайця, якщо вони одночасно не знаходяться на 1 сходинці, або якщо Вовк не випереджає Зайця. Заєць за 1 крок може піднятись на 1 сходинку, а Вовк – на 2. На початку бігу Вовк знаходиться на 0-й  сходинці, а  Заєць на К -ій (К >0 ) сходинці. Чи зможе Вовк схопити Зайця? Якщо Вовк і Заєць останнім кроком стають одночасно на останню сходинку, то Вовк схопить Зайця. Вовк та Заєць роблять кроки одночасно (синхронно).

Технічні умови. Програма Мultik читає з клавіатури числа N і K через пропуск. Програма виводить на екран 1, якщо Вовк поласував Зайцем або 0, якщо залишився голодним.  Всі розрахунки не виходять за межі типу іnteger Turbo Pascal.

Приклади.

Введення: 10 7
Виведення: 0

Введення: 10 5
Виведення: 1
Розв'язання.
Запишемо алгоритми мовами програмування.

Free Pascal:
Var N, K : Integer;
Begin
 Read (N, K);
 If N-K >= N/2
  Then Write ('1')
  Else Write ('0');
End.

C++:
#include <iostream>
using namespace std;
int main(){
 int n, k;
 cin >> n >> k;
 if (n-k >= n/2)
  cout << '1';
  else cout << '0';
}

пʼятниця, 13 березня 2015 р.

Puh

(Джерело: http://www.olymp.vinnica.ua/index_ua.php?lng=ua&cid=115)

Задача. Ведмедик Вінні-Пух тікає від бджіл по алеї, яка складається із товстих дерев, яких N (1<=N<=300). Кожне дерево має дупло певного діаметра D (D>=0). Якщо діаметр дупла більший за діаметр черевця Вінні-Пуха, то ведмедик може заховатись в цьому дуплі. Діаметр черевця Вінні-Пуха – V (V>0). У якому  першому за рахунком дереві він може заховатись? Скільки на алеї росте дерев, де може заховатись Вінні-Пух?

Технічні умови. Програма Puh читає з клавіатури послідовність цілих чисел одним рядком через пропуск: N, V, D1, D2 , ..., DN. Програма виводить на екран шукані велечини в указаній в умові послідовності. Якщо заховатися неможливо, програма виводить  0.

Приклади.

Введення: 10 5 1 0 4 8 10 2 0 1 9 0
Виведення: 1 4 3

Введення: 2 6 3 4
Виведення: 0
Розв'язання.
Будемо зчитувати діаметр чергового дерева та перевірятимемо чи може в ньому заховатися Вінні-Пух.
Запишемо алгоритми мовами програмування.

Free Pascal:
Var N, V,
 D, I, K : Integer;
    Flag : Boolean;
Begin
 Read (N, V);
 K := 0;
 Flag := True;
 For I := 1 To N Do Begin
  Read (D);
  If V < D
   Then Begin
    If Flag
     Then Begin
      Write ('1 ', I, ' ');
      Flag := False;
     End;
    Inc (K);
   End;
 End;
 Write (K);
End.

C++:
#include <iostream>
using namespace std;
int main(){
 int n, v, d, k=0;
 cin >> n >> v;
 bool f=true;
 for (int i=1; i<=n; i++) {
  cin >> d;
  if (v < d) {
   if (f) {
    cout << "1 " << i << ' ';
    f=false;
   }
   k++;
  }
 }
 cout << k;
}

четвер, 12 березня 2015 р.

Cat

(Джерело: http://www.olymp.vinnica.ua/index_ua.php?lng=ua&cid=114)

Задача. Одного разу кіт Леопольд на рибалці наловив N (1<= N <=100) риб. Прийшовши додому він ретельно їх зважив, пронумерував кожну рибу та записав результати до зошита. Допоможіть Леопольду знайти вагу найбільшої та найменшої рибини, та вагу всієї риби, яку зловив кіт. Вага рибини - ціле число, не більше 1000. Всі розрахунки не виходять за межі типу integer Turbo Pascal.

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

Приклад.
Введення: 5 2 3 5 7 8
Виведення: 8 2 25
Розв'язання.
Запишемо алгоритми мовами програмування.

Free Pascal:
Var N, R, Max, Min, S : Integer;
Begin
 Read (N);
 S := 0;
 Min := 1000;
 Max := 1;
 For N := 1 To N Do Begin
  Read (R);
  If Min > R
   Then Min := R;
  If Max < R
   Then Max := R;
  S += R;
 End;
 Write (Max, ' ', Min, ' ', S);
End.

C++:
#include <iostream>
using namespace std;
int main(){
 int n, r;
 cin >> n;
 int min=1000, max=1, s=0;
 for (int i=1; i<=n; i++) {
  cin >> r;
  if (r < min)
   min=r;
  if (r > max)
   max=r;
  s+=r;
 }
 cout << max<< ' '<< min<< ' '<< s;
}

середа, 11 березня 2015 р.

Salary

(Джерело: http://www.olymp.vinnica.ua/index_ua.php?lng=ua&cid=113)

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

Вхідні дані. Ви вводите з клавіатури одне дійсне число S.
Вихідні дані. Ви виводите на екран одне дійсне число з двома знаками після коми (без округлення).

Приклад вхідних і вихідних даних.
Введення: 1000
Виведення: 800.00
Розв'язання.
Запишемо алгоритми мовами програмування.

Free Pascal:
Var S : Real;
Begin
 Read (S);
 S := 0.8*S;
 Write (S:0:2);
End.

C++:
#include <iostream>
#include <iomanip>
using namespace std;
int main(){
 float s;
 cin >> s;
 cout.setf(ios::fixed);
 cout <<setprecision(2) << 0.8*s;
}

вівторок, 10 березня 2015 р.

Mirror

(Джерело: http://www.olymp.vinnica.ua/index_ua.php?lng=ua&cid=112)

Задача. У Несміяни кругле обличчя, радіус якого R см. Визначте, яку сторону повинно мати квадратне дзеркало, щоб, коли Несміяна милується собою, її відображення поміщалось у дзеркалі?

Вхідні дані. Ви вводите з клавіатури одне дійсне число R.
Вихідні дані. Ви виводите на екран одне дійсне число – сторону дзеркала. Результат містить 2 знаки після коми (без округлення).

Приклад вхідних і вихідних даних.
Введення: 7.6
Виведення: 15.20
Розв'язання.
Запишемо алгоритми мовами програмування.

Free Pascal:
Var R : Real;
Begin
 Read (R);
 R := 2*R;
 Write (R:0:2);
End.

C++:
#include <iostream>
#include <iomanip>
using namespace std;
int main(){
 float r;
 cin >> r;
 cout.setf(ios::fixed);
 cout <<setprecision(2) << 2*r;
}