eolymp
bolt
Try our new interface for solving problems
Məsələlər

Люди в черном

Люди в черном

Как известно, "Люди в черном" защищают нашу землю от нашествия инопланетных тараканов и других вредителей. Они следят за всеми перемещениями инопланетных врагов и друзей и контролируют их действия. Но недавно о деятельности "Людей в черном" узнало правительство и решило следить за ними. В организации "Люди в черном" работают несколько агентов. У каждого агента есть несколько характеристик: точность, сообразительность, скорость пешком, опыт и умение водить автомобиль. Все характеристики от нуля до единицы. Кроме того, каждому агенту присвоена определенная буква от "\textbf{A}" до "\textbf{Z}", а имя его - секретная информация. Когда в организацию приходит новый агент, ему подбирают свободную букву (которая не назначена ни одному агенту), ближайшую к первой букве имени агента. Если таких несколько, то выбирается первая в лексикографическом порядке буква. Например, если в организации уже есть агенты "\textbf{J}" и "\textbf{K}", а пришел агент с именем "\textbf{Killer}", то он получит букву "\textbf{L}". "Люди в черном" владеют несколькими автомобилями различных классов, которыми пользуются агенты. При этом скорость движения агента на любом автомобиле равна его умению водить автомобиль. Но для использования некторых автомобилей необходимо иметь умение не менее некоторого значения. Для каждого класса автомобилей известен максимальный пробег, после которого автомобиль приходит в негодность. Во вселенной существуют несколько различных видов инопланетных монстров, с которыми приходится сражаться "Людям в черном". Чтобы агент мог убить монстра, он должен иметь опыт и сообразительность не ниже минимальных для данного вида монстров. При этом, каждый монстр обладает уклончивостью, и агенты с невысокой точностью могут очень долго пытаться попасть в уклончивого монстра. Монстр определенного типа дает некоторое количество опыта агенту, убившему его. По мере работы агенты "Людей в черном" получают различные задания, которые бывают четырех типов. \begin{enumerate} \item Задания на доставку подразумевают доехать до точки назначения и вернуться назад. Для таких заданий известно расстояние от офиса "Людей в черном". \item При выполнении здания на уничтожение монстра надо добраться до монстра, убить его, и вернуться назад. Известно расстояние до монстра, его класс. Время, которое агент с точностью \textbf{accuracy} потратит на убиение монстра уклончивости \textbf{evasiveness} равно \textbf{evasiveness/accuracy}. При этом агент получит \textbf{(1-experience)*monsterExperience/maxMonsterExperience}, где \textbf{experience} - опыт агента, \textbf{monsterexperience} - опыт за убийство данного вида монстров, \textbf{maxMonsterExperience} - максимальный опыт за убийство монстров, и его точность увеличится на \textbf{(1-accuracy)*evasiveness/maxEvasiveness}, где \textbf{accuracy} - его точность до того, как агент убил монстра. Чтобы агент смог убить монстра, он должен иметь сообразительность и опыт не ниже минимальных для данного типа монстров. \item Еще один вид заданий - задание на расследование происшествия. Про такое задание известно расстояние от офиса, минимальная сообразительность агента, который может провести расследование. При этом время, которое агент потратит, равно \textbf{minTime/intellect}, где \textbf{intellect} - сообразительность агента, \textbf{minTime} - минимальное время на данное расследование. При этом агент получит \textbf{(1-experience)*intellect/minTime} опыта, где \textbf{experience} - его опыт до расследования, и на \textbf{(1-intellect)*intellect/minTime} увеличит свою сообразительность. \item Последний вид заданий - это переговоры с представителями других планет. Здесь, чем опытнее агент, тем лучше. Про такие задания известно расстояние от офиса и минимальный опыт агента, который сможет вести переговоры. Время, которое агент затратит на переговоры, равно \textbf{minTime/experience}, где \textbf{experience} - опыт агента, \textbf{minTime} - минимальное время на эти переговоры. Агент получит \textbf{(1-experience)*experience/minTime} опыта. \end{enumerate} На каждое задание "Люди в черном" отправляют одного или двух агентов. Если агентов двое, то их характеристики изменяются также, как если бы они выполнили задание по-одинчоке. Агент может поехать на задание на машине или пойти пешком. Если по дороге машина сломается, то агент вынужден оставшуюся часть задания ходить пешком. На задание отправляется тот агент (либо та пара агентов), который выполнит задание быстрее всего. Если таких несколько, то используются несколько правил. Во-первых, один агент лучше, чем два. Во-вторых, из двух агентов посылают того, у кого буква раньше в алфавите (если агентов по двое, то сравниваются упорядоченные пары букв). В-третьих, если пешком задание выполнится не медленнее, то автомобиль агент не берет. В-четвертых, из нескольких автомобилей выбирается автомобиль с минимальным номером. Все задания выполняются в минимальный момент времени, как только можно их выполнить. Если несколько заданий могут быть выполнены в один момент, приоритет отдается заданию, поступившему раньше. Когда агент движется пешком, его скорость растет на величину \textbf{(1-speed)*distance/maxDistance}, где \textbf{speed} - его скорость на начало движения, \textbf{distance} - расстояние, которое он прошел и \textbf{maxDistance} - максимальное расстояние, которое может пройти агент. Аналогично, умение водить автомобиль растет на величину \textbf{(1-auto)*distance/maxDistance}. При расчетах используются характеристики агента на начало выполнения текущего квеста. Когда агенты работают в паре, то для них высчитываются суммарные характеристики. При этом пешая скорость равна минимальной из двух скоростей, умение управлять автомобилем - максимальное из двух, точность пары есть полусумма точностей агентов. Суммарный опыт равен \textbf{1-(1-e_1)*(1-e_2)}, где \textbf{e_1} и \textbf{e_2} - опыт первого и второго агента. Аналогично, суммарная сообразительность равна \textbf{1-(1-i_1)*(1-i_2)}. Кроме заданий, в организацию может прийти новый агент, либо "Люди в черном" могут купить новый автомобиль. Когда опыт агента превышает заданный предел, то агент устает работать в организации "Люди в черном" и уходит на пенсию. Но в любом случае, агент доведет текущее задание до конца. Можете считать, что время округляется до минут, все разговоры в офисе не занимают времени. Ваша задача - написать программу, которая по заданным описаниям заданий выдаст действия всех агентов. \InputFile Все числа и строки во входном файле могут быть разделены пробелами и переводами строк. Входной файл содержит: \begin{itemize} \item Количество агентов (не более \textbf{26}), затем для каждого агента его имя, точность, скорость ходьбы, сообразительность, опыт, умение водить машину и букву, которая ему приписана. Все бкувы различны. \item Количество типов автомобилей (не более \textbf{50}), затем для каждого типа минимальное умение агента, чтобы он смог управлять автомобилем, максимальный пробег и название типа. \item Количество автомобилей (не более \textbf{50}), затем для каждого автомобиля название типа, текущий пробег (не более максимального пробега) и номер автомобиля. \item Количество видов монстров (не более \textbf{50}), затем для каждого типа минимальный опыт, необходимый для убийства этого монстра, минимальную сообразительность, уклончивость, опыт за убийство и название вида. \item Максимальное расстояние, которое может пройти агент, максимальную уклончивость монстров, максимальный опыт за убийство монстров и максимальный опыт, по достижении которого агент уходит на пенсию. \item Количество событий в организации (не более \textbf{2000}). Затем для каждого события: \begin{itemize} \item время его возникновения. \item При появлении нового агента: "\textbf{newagent}", затем имя агента, его точность, скорость ходьбы, сообразительность, опыт и умение водить автомобиль. \item При появлении нового автомобиля: "\textbf{newcar}", название типа автомобиля, его текущий пробег и номер. \item Для задания на доствку: "\textbf{quest}", "\textbf{run}" и расстояние от офиса "Людей в черном". \item Для убийства монстра: "\textbf{quest}", "\textbf{kill}", расстояние от офиса и название вида монстра. \item Для расследования: "\textbf{quest}", "findout", расстояние от офиса, минимальная сообразительность и минимальное время расследования. \item Для переговоров: "\textbf{quest}", "\textbf{talk}", расстояние от офиса, минимальный опыт и минимальное время переговоров. \end{itemize} \end{itemize} Все характеристики - вещественные числа от нуля до единицы. Все остальные числа во входном файле целые, по модулю не более \textbf{10^6}. Все имена агентов, названия типов автомобилей и монстров и номера автомобилей состоят из латинских букв и цифр, их длина не более десяти. Все имена, названия и номера различны. События отсортированны по времени, время поступления всех событий различно. \OutputFile В выходной файл выведите все события в следующем формате: "\textbf{dddd:hh:mm <Описание события>}", где"\textbf{dddd:hh:mm}" - день, час и минута возникновения события от начального момента времени, "\textbf{<Описание события>}" - одно из описаний, перечисленных ниже. \begin{itemize} \item "\textbf{New agent <имя> got a letter <буква>.}" - новый агент по имени \textbf{<имя>} получил букву \textbf{<буква>}. \item "\textbf{MIB bought a car of class <название>.}" - появился новый автомобиль класса \textbf{<название>}. \item "\textbf{Agent <буква1>\[ and agent <буква2>\] started quest <номер>\[ using car <номер автомобиля>\].}" - агент \textbf{<буква1>} (и, возможно, агент \textbf{<буква2>}) начал исполнение задания \textbf{<номер>}, возможно, с использованием автомобиля \textbf{<номер автомобиля>}. \item "\textbf{Agent <буква1>\[ and agent <буква2>\] killed monster <название>.}" - агент \textbf{<буква1>} (и, возможно, агент \textbf{<буква2>}) убил монстра вида \textbf{<название>}. \item "\textbf{Car <номер> was broken.}" - автомобиль \textbf{<номер>} выработал свой ресурс (достиг максимального пробега). \item "\textbf{Agent <буква1>\[ and agent <буква2>\] finished quest <номер>.}" - агент \textbf{<буква1>} (и, возможно, агент\textbf{<буква2>}) окончил исполнение задания \textbf{<номер>}. \item "\textbf{Agent <буква> has tired.}" - агент \textbf{<буква>} ушел на пенсию по достижении соответствующего опыта. \end{itemize} Задания нумеруются с единицы, в порядке их перечисления во входном файле. Если несколько событий происходят в одно время, то их необходимо выводить в том порядке, как они перечислены выше (например, сначала пришел новый агент, а затем сломался автомобиль).
Zaman məhdudiyyəti 3 saniyə
Yaddaşı istafadə məhdudiyyəti 64 MiB
Giriş verilənləri #1
1
James 0.8 0.7 0.75 0.5 0.85 J

1
0.4 100 mibLexus

2
mibLexus 0 pq123bu
mibLexus 12 ab891ah

1
0.2 0.3 18 100 cockroach

200 20 200 0.95

4
10 newagent Klint 0.9 0.8 0.5 0.7 0.86
20 quest run 48
30 newcar mibLexus 47 aa890bu
43 quest kill 100 cockroach
Çıxış verilənləri #1
0000:00:10    New agent Klint got a letter K.
0000:00:20    Agent K started quest 1 using car ab891ah.
0000:00:30    MIB bought a car of class mibLexus.
0000:00:43    Agent J started quest 2 using car pq123bu.
0000:02:02    Car ab891ah was broken.
0000:02:12    Agent K finished quest 1.
0000:02:41    Car pq123bu was broken.
0000:03:04    Agent J killed monster cockroach.
0000:05:26    Agent J finished quest 2.
Müəllif Dmitry Gozman
Mənbə Dmitry Gozman Contest 1, Petrozavodsk training camp, January 2007