Доброго времени суток, CF. Возник вопрос — просьба. Может ли кто нибудь написать решение задачи С4 из ЕГЭ по информатике на C++ используя map, прокомментировав основные шаги в своем решении? Желательно, чтобы при этом сложность алгоритма была оптимальной, насколько это возможно с map'ом.
Условие.
В командных олимпиадах по программированию для решения предлагается не больше 11 задач. Команда может решать предложенные задачи в любом порядке. Подготовленные решения команда посылает в единую проверяющую систему соревнований. Вам предлагается написать эффективную, в том числе по используемой памяти, программу, которая будет статистически обрабатывать пришедшие запросы, чтобы определить наиболее популярные задачи. Следует учитывать, что количество запросов в списке может быть очень велико, так как многие соревнования проходят с использованием Интернет. Перед текстом программы кратко опишите используемый вами алгоритм решения задачи. На вход программе в первой строке подаётся количество пришедших запросов N. В каждой из последующих N строк записано название задачи в виде текстовой строки. Длина строки не превосходит 100 символов, название может содержать буквы, цифры, пробелы и знаки препинания.
Пример входных данных:
6
А+B
Крестики-Нолики
Прямоугольник
Простой делитель
А+В
Простой делитель
Программа должна вывести список из трёх наиболее популярных задач с указанием количества запросов по ним. Если в запросах упоминаются менее трех задач, то выведите информацию об имеющихся задачах. Если несколько задач имеют ту же частоту встречаемости, что и третья по частоте встречаемости задача, их тоже нужно вывести. __
Пример выходных данных для приведённого выше примера входных данных:
А+В 2
Простой делитель 2
Крестики-Нолики 1
Прямоугольник 1
Демонстрационный вариант ЕГЭ 2012 г. ИНФОРМАТИКА и ИКТ, 11 класс. © 2012 Федеральная служба по надзору в сфере образования и науки Российской Федерации
Заранее спасибо =)
p.s. только я это не компилил. p.s.s. сорри, у меня раздвоение личности, я сам создаю тему и сам отвечаю :(
multimap<>
не поддерживаетoperator []
. А также код будет некорректно работать в случае, если несколько задач имеют одинаковую популярность.Выводит в конце лишние
" 1"
Можете еще прокомментировать код, если не очень трудно?
З.Ы. Это ни грамму не домашнее задание или что то подобное, это чисто для себя, ибо в школе объясняют только часть А и Б
Предыдущий пост топикстартера намекает, что перед нами очередной петросян/педобир
Откуда лишние "1"? Может быть из-за того, что в вашем примере "B" в 1 месте латинская, а в другом — кириллица? :0)
Прокомментировал код (хотя нечего комментировать, почитай раз два).
ИМХО: Вообще на ЕГЭ всё-таки не стоит так выпендриваться, напиши сортировку пар <строка,число> и хватит :)
UPD: что-то я разошёлся, разбирайся сам уже :D
Спасибо
А сортировка пары <строка, число> как будет выглядеть в коде?
map работает не быстрее?
В основе map'а ведь сбалансированное двоичное дерево? А в парах что?
Теоретически у нас есть N строк и мы их N раз вставляем в map за log(n)*length(string), т. е. асимптотика O(N*log(N)*SUM), где SUM — сумма длин всех строк(к тому же это всё делается 2 раза). Но у нас всего 11 различных строк, зато N — может быть очень большим, может быть гораздо проще хранить максимум 11 пар <число,строка>, при добавлении новой строки плюсуем её вхождения, если она была, иначе — добавляем пару <1,текущая строка>. O(11*N*SUM) — > O(N*SUM). Потом сортируем 11 пар и выводим.
Дожили, на Codeforces обсуждают ЕГЭ по информатике...
Предлагаете stackoverflow? :)
Я, конечно, вопрос не изучал, но где еще?
Предлагаю не опускать Codeforces до сайта, где помогают школьникам с решением ЕГЭ. Для этого есть контактик/мейл-ру-ответы/егэ-форумы/репетиторы.
Замечу что вопрос сформулирован правильно, да и легенда задачи тут к месту. Не надо быть таким предвзятым.