середа, 30 листопада 2016 р.

Шановні, учасники обласного факультативу з програмування!!!

Прошу прийняти участь у турнірах, що будуть розміщені на сайті Школи олімпійського резерву на сторінці турнірів http://sbs2.km.ua/contests/
 Буде проведено 4 тренувальних турніри 1, 3, 6 та 8 грудня з 15 по 20 годину. Реєстрація вільна. Також можна використовувати свої наявні логіни обласного факультативу. 
Ніяких обмежень щодо участі немає.

Підготовка до олімпіади

Задача ТRЕЕ (20 балів)
Сергійко, обрізаючи сухі гілки на дереві, виявив цікаву його особливість:
-          жодна суха гілка на собі не має інших гілок;
-          від стовбура дерева, як і від кожної несухої гілки, безпосередньо відростає одна й та ж кількість гілок, наприклад, N.
Сергійко з'ясував, що знаючи число N (2 <= N <= 100), а також кількість всіх сухих гілок на дереві - М (0 <= М <= 1000), можна завжди взнати загальну кількість всіх гілок на такому дереві.
Необхідно написати програму, яка б обчислювала загальну кількість гілок або вказувала на невідповідність чисел N та М умові задачі.
Вхідні дані: Єдиний рядок вхідного файлу TREE.DAT містить цілі числа N та М.
Вихідні дані: Єдиний рядок вихідного файлу TREE.SOL має містити загальну кількість гілок або текст “mismatch” якщо числа N та М не відповідають умові задачі.
Приклад;
ТRЕЕ.DАТ

ТRЕЕ.SOL

3 7
9

3 2

mismatch


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


{$APPTYPE CONSOLE}
var i,riv,n,m,s,k,r,k1
:integer;
f:text;

begin
assign(f,'tree.dat');
reset(f);
readln(f,n,m);
close(f);
  k:=1; riv:=0;r:=0;
  while (k<m)do begin
      i:=1;
      while (k<m)and(i<=round(riv*(ln(n)))) do
      begin r:=r+n;i:=i+1;k:=k+n-1;
     end;

   riv:=riv+1;
   end;
assign(f,'tree.sol');
rewrite(f);
if (m=k)or (m=0)then writeln(f,r)
 else writeln(f,'mismatch');
close(f);
end.