Задача B1. ТЕГЛИЛКИ

 

За участниците в Международната олимпиада по информатика в Сеул през 2002г. един от почивните дни предложи невероятно преживяване – посещение в музея на модерното изкуство. Сред “по-едрите” експонати, разположени на открито в парка на музея, можеше да се наблюдава склуптура, съставена от еднакви теглилки, отчитащи измереното тегло на кръгъл циферблат. Склуптурата изглеждаше като пирамида (вж. Фигурата). Теглилката на върха беше поставена така, че тежестта й да се разпредели поравно между двете стоящи отдолу теглилки. Те от своя страна лежаха върху три теглилки, така че за всяка от тях тежестта се разпределяше поравно между двете стоящи отдолу. Трите теглилки лежаха върху нови четири, така, че тежестта на всяка от тях се разпределяше по същия начин и т.н. Незнайно защо, художникът беше закрепил неподвижно стрелките на всички теглилки на нулевото деление, както е показано и на фигурата. Напишете програма WGHT.EXE, която да определя какво би показвала стрелката на някоя от теглилките, ако не беше закрепена.

 

Фигура

Входните данните на програмата ще бъдат зададени в единствения ред на стандартния вход и ще се състоят от три цели положителни числа T, и M, разделени с по един интервал. Числото T e собственото тегло на всяка една от теглилките (1 T ≤ 60000), N – броят на редовете на пирамидата (3 ≤ N 30),  а M – поредният номер на теглилка в най-долния ред на пирамидата, броени отляво надясно.

На стандартния изход програмата трябва да изведе показваното от M-тата теглилка на последния ред тегло във формата на нормализирана обикновена десетична дроб (числителят и знаменателят разделени със знака за делене /).

 

ПРИМЕР

 

Вход                                                           Изход

10 4 2                         85/4


 

 

 

 

 

          Задача B2. СЪРВЪР

 

За обслужване на IRC-сървър е необходима програма, която прави статистика за честотата на посещения на различните потребители на сървъра и в различните негови “стаи”. Броят на посещенията може да достигне до 106. Всеки потребител се идентифицира с потребителски идентификатор, а всяка стая - с име. Идентификаторите и имената са низове с дължина до 12 знака включително и могат да съдържат малки латински букви, главни латински букви и цифри. Програмата трябва да може да поддържа до 2048 идентификатора и до 2048 имена включително. При всяко включване на потребител към сървъра се прави проверка, дали той е регистриран. Ако това е първото му посещение на сървъра, тогава се добавя регистрирация на потребителя, и се отброява първото му посещение, а ако не е първо – се отброява поредното посещение на този потребител. При влизане на регистриран потребител в стая, се отброява поредното посещение в стаята. Стаите се създават или закриват динамично, така че техният брой е различен във всеки отделен момент.

Напишете програма IRC.EXE, която натрупва необходимата статистика и при получена заявка извежда идентификаторите на потребителите, посещавали най-често IRC-сървъра, подредени в намаляващ ред на броя на посещенията, както и стаите, съществуващи в момента, подредени по азбучен ред (заедно с броя посещения на съответната стая). В началото нито един потребител и нито една стая не са дефинирани и никакви посещения не са регистрирани.

Входни данни се четат от стандартния вход. Входният файл съдържа два вида команди:

1) команда за включване на потребител към сървъра:

<потребител>{, <име на стая>}

2) команди за управление – един от следните видове:

!А <име на стая>{, <име на стая>}   за добавяне на стаи;

!D k      за премахване на стаите с по-малко  от  k  посещения;

!S m     за извеждане на потребителските идентификатори на m–те потребителя, посещавали най-често IRC-сървъра, и на подреден списък на стаите.

Скобите { } показват, че заграденото в тях се повтаря 0,1 или повече пъти. Ако потребител се регистрира, без да е посочена поне една стая, то се отчита посещение само на сървъра. Запетаята служи за разделител, в случай че командата има повече от 1 параметър и след всяка запетая има по един интервал. Край на всяка команда е знакът за край на ред. Никоя команда не е по-дълга от 255 байта.

 

Резултатите се извеждат на стандартния изход. За всяка управляваща комада от вида !S m се извеждат m на брой потребителски идентификатора (1<m£100), разделени със запетая и интервал, и толкова на брой реда, колкото са стаите в момента, като всеки ред съдържа

<име на стая><брой посещения в стаята>.

От двете страни на тирето трябва да има по един интервал. Акo съществуват потребители с еднакъв брой посещения на сървъра, то те се извеждат по реда на регистрация.

 

ПРИМЕР

 

Вход:

 

varna, Bulgaria

boy6, varna

ana, Bulgaria, varna

burgas, nesto, Shumen

satana, Bulgaria, burgas, varna, nesto

marian, burgas

boy6, varna

ana, Shumen

boy6, Bulgaria, nesto

satana, varna, nesto

!S 2

pleven

more, pleven, varna, burgas

ana, varna, burgas

boy6

!D 2

!S 3

 

 

Изход:

 

boy6, ana

Bulgaria - 3

Shumen - 1

burgas - 2

nesto - 3

varna - 5

boy6, ana, satana

Bulgaria - 3

burgas - 4

nesto - 3

varna - 7

 


 

 

 

 

          Задача B3. ЦАРСКИ ХОД

 

Върху шахматна дъска с размери M на N царят преминал през всички клетки точно по веднъж и се върнал в началното си положение, като никъде не пресичал пътя си. Царят може да прави стъпки от клетката, в която се намира, само в съседните клетки по хоризонтал, вертикал или диагонал.

Напишете програма MOVES.EXE, която въвежда от един ред на стандартния вход стойностите на M и N, разделени с интервал и отпечатва на стандартния изход минималната сума от хоризонталните и вертикалните ходове, с които царят може да направи описаното преминаване (1 < M < 1000, 1 < N < 1000).

 

ПРИМЕР

 

Вход

 

2 2

 

Изход

 

4