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

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

Задача Т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.

Немає коментарів :

Дописати коментар