ПРОЛЕТЕН ТУРНИР ПО ИНФОРМАТИКА
Ямбол, 13-14 юни 2009 г.
Контролно състезание за група А (11-12 клас)
Задача AK1. ДЪРВО НА ДРОБИТЕ
Има много начини да се подредят правилните дроби. Един от тях е – в безкрайно
пълно двоично дърво, което дефинираме по следния начин: дървото има фиктивен (–1)-
ви ред, в който са двете „дроби“ 0/1 и 1/0 (макар че всъщност дроб 1/0 не съществува).
Нулевият ред на дървото се състои от един връх, а i-тия – от 2i върха. За всеки връх x от
неотрицателно ниво дефинираме „непосредствен ляв предшественик“ НЛП(x) и
„непосредствен десен предшестве–
ник“ НДП(x) така:
1) Нека a e върхът от нулевия ред.
Тогава НЛП(a) = 0/1, а НДП(a) = 1/0;
2) Ако връх l е пряк ляв наследник
на b, то НЛП(l) = НЛП(b), а НДП(l) =
b (тъй като b е вдясно от l);
3) Ако връх r е пряк десен
наследник на b, то НДП(r)= НДП(b),
а НЛП(r)=b (тъй като b е вляво от r).
Дробта x/y във всеки друг връх v се
изчислява по следния начин – x е
сума от числителите на дробите в
НЛП(v) и НДП(v), а y – от
знаменателите на дробите в НЛП(v) и НДП(v). Така, дробта записана на нулевият ред е
(0+1)/(1+0) = 1/1. Първите няколко реда на дървото са показани на фигурата.
Обяснение: НДП на върха, в който е дробта 3/4 е върхът, съдържащ дробта 1/1, а
неин НЛП е върхът, съдържащ дробта 2/3.
Може да се докаже че така дефинираното безкрайно дърво съдържа всички правилни
дроби точно по веднъж. Напишете програма rattree, която да отговаря на два типа
въпроси: „На кой ред и на коя позиция в реда се намира дробта p/q?“ и „Коя дроб е
записана в j-тата позиция на i-тия ред?“
Вход
На един ред на стандартния вход са зададени a/b или a b – две естествени числа,
разделени с един знак за деление или с един интервал (0 ≤ a, b ≤ 261). Първият тип вход
е въпрос „Къде се намира дробта a/b в дървото?“, а вторият – „Коя дроб е в реда с
номер a в позиция с номер b?“ Номерата на редовете и позициите започват от нула.
Изход
За въпрос от първия вид програмата трябва да изведете реда и позицията в него, където
се намира зададената дроб, разделени с един интервал. За въпрос от втория тип
програмата трябва да изведе числителя и знаменателя на дробта, намираща се на
зададената позиция, разделени с един знак за деление. Двете стойности, които трябва
да изведе програмата винаги са неотрицателни, не по-големи от 261
.
GIẢI ĐẤU MÙA XUÂN TIN HỌCYambol, 13-14 tháng 6 năm 2009.Kiểm soát nhóm một cuộc thi (11-12)AK1 nhiệm vụ. CÂY PHÂN SỐCó rất nhiều cách để sắp xếp các phần phân đoạn riêng. Một trong số họ là vô hạn, trongcây nhị phân đầy đủ, chúng tôi xác định như sau: cây có một hư cấu (-1)-Thứ tự mà trong đó bạn là cả hai "phân số" 0/1, 1/0 (mặc dù trên thực tế một phần 1/0 n├áy kh├┤ng tß╗ôn).Dòng zero của cây bao gồm một đỉnh cao duy nhất, và i-th-bởi 2i đầu. Cho mỗi đỉnh x củamức độ vô định nghĩa "người tiền nhiệm ngay lập tức trái" ER (x) và"ngay lập tức phải-predšestveNick "BFF (x):1) cho một tip e từ dòng zero.Sau đó NLP (a) = 0/1, và BFF (a) = 1/0;2) nếu đỉnh là người kế vị trực tiếp l tráib, sau đó NLP (l) = NLP (b), và BFF (l) =b (kể từ khi b là ở bên phải của l);Top 3) nếu r là một quyền trực tiếpsự kế thừa của b, BFF (r) = BFF (b)và NLP (r) = b (kể từ khi b là bên trái của r).Các phần x / y trong mỗi khác đỉnh v làtính toán là sau-xsố tiền của čislitelite phân số trongNLP (v) và BFF (v), và y-từdenominators các phần phân đoạn trong NLP (v) và BFF (v). Vì vậy, các phần của số không được ghi nhận lần lượt(0 + 1) / (1 + 0) = 1/1. Vài dòng đầu tiên của cây được hiển thị trong hình.Giải thích: BFF trên đầu trang, đó là phần 3/4, mẹo có chứa các phần 1/1, vàNLP của cô đá có chứa các phần 2/3.Nó có thể được chỉ ra rằng định nghĩa một cây vô hạn có chứa tất cả các chính xácphân số đúng một lần. Viết một chương trình rattree đáp ứng hai loạicâu hỏi: "những dòng và có vị trí trong dòng là phần nhỏ p/q?" và "là gìghi lại ở vị trí j-th của dòng i-th?"Đăng nhậpMột trong những dòng đầu vào tiêu chuẩn được thiết lập một / b hoặc một b-hai số tự nhiên,cách nhau bằng một phân vùng hoặc đăng ký với một không gian (0 ≤ a, b ≤ 261). Các loại đầu tiên của đăng nhậpе въпрос „Къде се намира дробта a/b в дървото?“, а вторият – „Коя дроб е в реда сномер a в позиция с номер b?“ Номерата на редовете и позициите започват от нула.ИзходЗа въпрос от първия вид програмата трябва да изведете реда и позицията в него, къдетосе намира зададената дроб, разделени с един интервал. За въпрос от втория типпрограмата трябва да изведе числителя и знаменателя на дробта, намираща се назададената позиция, разделени с един знак за деление. Двете стойности, които трябвада изведе програмата винаги са неотрицателни, не по-големи от 261.
đang được dịch, vui lòng đợi..
