Пензенский
Государственный
Университет
  • 440000 г. Пенза,
    ул. Красная 40
  • +7 (8412) 36-82-26

Software Engineering Cup 2014

27 апреля 2014 года

{
Состоялась Межвузовская студенческая олимпиада по прикладному программированию. В олимпиаде участвовало более 70 учащихся с первого по пятый курсы ПГУ, ПГТУ и ПГУАС.
}

< Результаты >

МестоФ.И.ОВУЗКурсРешенных задачПриз
1Гуляевский А.В.ПГУ4 4Google Nexus 7 32Gb 4G, денежная премия
2Родин Д.А.ПГУ3 4Google Nexus 7 16Gb, денежная премия
3Разживин М.И.ПГУ2 3Galaxy Tab Lite, денежная премия
4Воронков В.В.ПГУ3 3денежная премия
5Баринов А.Д.ПГУ3 2денежная премия
6Сотников Р.А.ПГУ4 2денежная премия
7Гарифулин А.Д.ПГУ4 2денежная премия
8Мусатов М.Д.ПГУ4 2денежная премия
9Коптелов Н.А.ПГУ3 1денежная премия
10Михейкин В.А.ПГУ3 1денежная премия
11Лопухин И.В.ПГУ2 1денежная премия
12Шевляков Н.И.ПГУ5 1денежная премия
13Дроздов Д.Н.ПГУ1 1денежная премия
14Артюшин А.И.ПГУ1 1денежная премия
15Филин С.Е.ПГУ3 1денежная премия
16Любезнов А.П.ПГУ1 1денежная премия
17Спирин Д.В.ПГУ3 1денежная премия
18Козинцев Е.О.ПГУ2 1денежная премия
19Васильев Д.В.ПГУ1 -поощрительный приз
20Войнов А.С.ПГУ2 -поощрительный приз
21Лоскутова А.А.ПГУ3 -поощрительный приз
22Маркин Е.И.ПГТУ1 -поощрительный приз
23Перевалов С.С.ПГТУ1 -поощрительный приз
24Сенокосов И.В.ПГУ2 -поощрительный приз
25Тормина Е.С.ПГУ5 -поощрительный приз

< Задания >

Посмотреть

A - Честное деление

Сегодня у вашего друга день рождения! Ему надо скинуться на подарок. Вас, его друзей, много, вы можете прикупить что-то стоящее. Очевидно, у всех разные финансовые возможности. Каждый друг, включая вас, говорит сумму в рублях, больше которой он потратить не может. Поскольку приобрести подарок — ваша задача, вам нужно честно разделить сумму на всех.

Математически говоря, необходимо минимизировать максимальную разницу между вложенной суммой и n-й долей стоимости подарка.

Примем во внимание некоторые очевидные условия:

  • никто не даст больше, чем он сказал,
  • сумма, которую даст каждый, будет являтся целым числом рублей, даже на копейки делить никто не будет,

Поскольку рубль делить не получится, может возникнуть ситуация, когда есть разные варианты того, как сумму разделить. В это случае больше дает тот, кто написал большую сумму. Если и в этом случае есть двусмысленность, то есть два или более друга могут потратить одинаковую сумму, то платит больше тот, кто идет первым в списке.

Входные данные

Первое число — количество тест-кейсов. В каждом тесте до 100 кейсов. Далее на каждый кейс:

  • одна строка с двумя положительными целыми p и n: цена подарка в рублях (1 <= p <= 1000000) и количество скидывающихся (2 <= n <= 100), включая вас.
  • одна строка с n положительными целыми ai (1 <= ai <= 1000000), где ai — максимальная сумма, которую i-ый друг готов дать.

Выходные данные

На каждый кейс:

  • одна стркоа с n целыми - количество денег, которое каждый друг даст на подарок. Если стоимость подарка не может быть собрана из того, что могут дать друзья, выведите без кавычек "IMPOSSIBLE".
input.txt 3 20 4 10 10 4 4 7 3 1 1 4 34 5 9 8 9 9 4
output.txt 6 6 4 4 IMPOSSIBLE 8 7 8 7 4

B - Рекорд

Вы только что поставили рекорд в видеоигре! И теперь вам нужно ввести свое имя в таблицу рекордов, используя джойстик.

Это происходит следующим образом. Используются только латинские заглавные буквы. Вначале имеется строка из букв A. Их ровно столько, сколько букв в вашем имени. (Предположим, вы указали длину имени ранее.) Вначале курсор на первой букве. Когда вы двигаете джойстик вперед, буква меняется на следующую по алфавиту, если назад, то на предыдующую. Алфавит зациклен, то есть за Z идет A, а перед A идет Z.

Движение джойстика вправо и влево смещает курсор соответственно на букву вперед или назад. Движение курсора так же зациклено. То есть, движение вправо на последней букве перемешает курсор на первую и наоборот.

Вам дано имя, которое нужно ввести. Ваша задача - посчитать, какое минимальное число движений джойстика нужно сделать. Не имеет значения, на какой букве будет курсор в конце.

Входные данные

Первое число — количество тест-кейсов. В каждом тесте до 100 кейсов. Далее на каждый кейс:

  • одна строка до 1000 символов заглавных латинских букв - имя, которое нужно ввести.

Выходные данные

На каждый кейс:

  • одна строка с целым неотрицательным числом - минимальнрое количество движений.
input.txt 2 JEROEN JAN
output.txt 56 23

C - Места

Команды, пронумерованные до 1 до n, принимающие участие в соревнованиях по программированию каждый год, в конце каждого года попадают в рейтинговый список, отсортированный по их рейтингу. Порядок команд в списке за прошлый год известен.

В это году жюри сменило систему. Вместо полного списка, который приводил к тому, что у последних команд просто опускались руки, публикуется список пар команд, которые, чье относительное положение изменилось. Например, если команда 6 была ниже 13-й в прошлом году, а теперь стала выше, то пара (6, 13) публикуется. При таком ракладе команыд не видят их общего положения, но могут судить о своем прогрессе по отношению к другим командам.

Конечно, вас это не остановит от попытки все-таки узнать, кто на каком месте в целом. Имея список команд, упорядоченный по рейтингу, за прошлый год, а так же полный набор пар команд, относительное положение которых изменилось, восстановите как можно больше команд в рейтинговом списке за текущий год. Также есть вероятность, что жюри могло допустить ошибку, которая не согласуется ни с одним возможным вариантом списка за этот год. Вам нужно это так же определить.

Входные данные

Первое число — количество тест-кейсов. В каждом тесте до 100 кейсов. Далее на каждый кейс:

  • На первой строке количество команд 2 <= n <= 500.
  • На следующей стркое n целых ti (1 <= ti <= n): отсортированный по рейтингу список команд за прошлый год, от самой сильной команды до самой слабой. Команда ti занимает i-ю позицию в прошлогоднем списке. Все ti различны.
  • Одна строка с целым 0 <= m <= 25 000 - количество пар команд, относительное положение которых изменилось.
  • m строк с двумя целыми ai and bi (1 <= ai < bi <= n) - команды, относительное положение которых в списке изменилось. Каждая пара указана ровно один раз.

Выходные данные

На каждый кейс:

  • Одна строка с n целыми числами - положение команд за этот год, от лучшей к худшей. Если команда на какой-то позиции не может быть определена точно, выведите знак вопроса без кавычек "?". Если пары, предоставленные жюри, некорректные, для данного кейса выведите без кавычек "IMPOSSIBLE".
input.txt 3 5 5 4 3 2 1 2 2 4 3 4 3 2 3 1 0 4 1 2 3 4 3 1 2 3 4 2 3
output.txt 5 3 2 4 1 2 3 1 IMPOSSIBLE

D - Изучаем цифры

Вам дано положительное целое число. Сколькими способами можно из его цифр собрать простое число? Каждая цифра в получившемся числе не может повторяться больше раз, чем она повторялась в исходном числе. Порядок цифр можно свободно менять. Числа, различающиеся наличием нулей в начале, считаются за одно число.

Входные данные

Первое число — количество тест-кейсов. В каждом тесте до 200 кейсов. На первой строке надо количество кейсов. Далее на каждый кейс:

  • Положительное целое число длиный не более 7 цифр.

Выходные данные

На каждый кейс:

  • Одна строка с одним числом - количество простых чисел, которые можно "собрать" из цифр данного числа.
input.txt 4 17 1276543 9999999 011
output.txt 3 1336 0 2

E - Эдсгер

Все знают Эдсгера. А он знает все самые быстрые маршруты в городе. И он совсем не таксист.

Все очень просто, мой друг. Эдсгер держит в голове карту города, которая представлена в виде графа. Все как обычно: вершины - это перекрестки и другие места, где есть выбор, куда повернуть. Ребра - отрезки дорог, с которых нельзя куда-то свернуть.

Город строится, становится больше. Эдсгер уже не может все держать в голове. Поэтому перед вами стоит задача - искать самые быстрые пути по дорогам в городе, используя при этом знания и опыт Эдсгера.

Входные данные

Первое число — количество тест-кейсов. В каждом тесте до 100 кейсов. Далее на каждый кейс:

  • число вершин 1 <= n <= 50000 и число ребер 0 <= m <= 50000 через пробел,
  • m строк с описанием ребер: номер вершины 1 <= u <= n в начале ребра, номер вершины 1 <= v <= n в конце ребра и вес 1 <= w <= 109 - за какое время можно преодолеть этот участок дороги, в минутах, все через пробел,
  • f и t - начальная и конечная точки маршрута.

Суммарное число как ребер, так и вершин во всех кейсах одного теста не превосходит 50000.

Выходные данные

На каждый кейс:

  • единственное число - продолжительность езды по самому быстрому маршруту, в минутах, если маршрута не существует, выведите без кавычек "NO".

Гарантируется, что в каждом кейсе ответ не превосходит 109.

input.txt 3 3 2 1 2 5 2 3 7 1 3 3 3 1 2 4 1 3 7 2 3 1 1 3 3 1 1 2 4 1 3
output.txt 12 5 NO

F - Не игрушки

Спички детям не игрушки. Однако они являются идеальным инструментом для составления чисел. Числа составляются следующимо образом:

Точно так же цифры представляются на цифровых циферблатах.

Какие минимальное и максимальное числа можно составить из данного количества спичек?

Входные данные

Первое число — количество тест-кейсов. В каждом тесте до 100 кейсов. Далее на каждый кейс:

  • Одна строка с количеством спичек (от 2 до 100 штук влючительно).

Выходные данные

На каждый кейс:

  • Одна строка с минимальным и максимальным числом. Эти числа не должны содержать нулей в начале и должны быть положительными.
input.txt 4 3 6 7 15
output.txt 7 7 6 111 8 711 108 7111111

G - Делим отрезки

Вы подумали про геометрию, но могу вас уверить, что ее тут нет. Имеются в виду отрезки последовательностей.

Вам дана последовательность целых положительных чисел. Посчитайте количество отрезков этой последовательности, сумма чисел в которых делится на данное число. Отрезки могут пересекаться. Наример, последовательность 2;1;2;1;1;2;1;2 содержит шесть отрезков, сумма которых делится на четыре: [1, 8], [2, 4], [2, 7], [3, 5], [4, 6], [5, 7].

Например, отрезок последовательности от второго элемента до седьмого имеет сумму 8, которая делится на 4. Обратите внимание, что индексация последовательности начинается с единицы.

Входные данные

Первое число — количество тест-кейсов. В каждом тесте до 100 кейсов. Далее на каждый кейс:

  • Каждый кейс начинается со строки с двумя целыми числами 1 <= d <= 1 000 000 и 1 <= n <= 50 000, делитель сумм и длины данной последовательности соответственно.
  • Вторая строка содержит саму последовательность с целыми от 1 до 1000000000 включительно.

Выходные данные

На каждый кейс:

  • Одна строка с одним числом - количеством отрезков, сумма чисел в которых делится на данный делитель d.
input.txt 2 7 3 1 2 3 4 8 2 1 2 1 1 2 1 2
output.txt 0 6

H - Готовим контест

Саша, Гоша и Лев Вячеславович проделали большую работу по подготовке контеста. Осталось последнее — доделать монитор. Они уже написали код, который считает количество решенных задач и штрафное время. Осталось только узнать, кто какое место занимает и вывести таблицу участников, упорядоченную по местам, начиная с первого...

Места начинаются с единицы. Место определяется следующими правилами:

  • выше тот, у кого больше решенных задач,
  • выше тот, у кого меньше штрафное время,
  • при равенстве количества задач и штрафного времени участники делят место: a участников могут иметь i-е место, при этом участник (участники), которые идут за ними, занимают место i + a.

Входные данные

Первое число — количество тест-кейсов. В каждом тесте до 100 кейсов. Общее количество позиций (участников, которые в каждом кейсе считаются разными) не более 200000. Далее на каждый кейс:

  • В первой строке n — количество команд в списке.
  • В следующих n строках через пробел:
    • название команды (не более 20 латинских букв),
    • неотрицательное целое число меньше или равное 8 — количество решенных задач,
    • неотрицательное целое число меньше или равное 4000 — штрафное время.

Выходные данные

На каждый кейс:

  • n строк, в которых через пробел:
    • место,
    • порядковый номер команды из начального списка,
    • название команды,
    • количество решенных задач,
    • штрафное время.

Для более четкого понимания условия смотрите пример. Обратите внимание на указанные места команд.

Список должен быть упорядоченным, начиная с первого места. При равестве количества решенных задач и штрафного времени выше водится команда, чье название идет по алфавиту раньше.

input.txt output.txt
2 12 abac 1 100 baca 2 120 caba 1 110 bacc 2 90 cabac 3 180 bucac 3 190 cucab 2 200 ucbab 1 150 bubca 3 210 cuabc 2 120 abcuc 3 180 bcuac 3 210 2 kop 1 300 pok 1 301 1 11 abcuc 3 180 1 5 cabac 3 180 3 6 bucac 3 190 4 12 bcuac 3 210 4 9 bubca 3 210 6 4 bacc 2 90 7 2 baca 2 120 7 10 cuabc 2 120 9 7 cucab 2 200 10 1 abac 1 100 11 3 caba 1 110 12 8 ucbab 1 150 1 1 kop 1 300 2 2 pok 1 301

< Статистика >

Посмотреть

Из 75 зарегистрированных студентов в олимпиаде приняли участие 58 человек.
Из них с решением задач 18 участников справились следующим образом:

  • 4 задачи – решили 2 участника
  • 3 задачи – решили 2 участника
  • 2 задачи – решили 4 участника
  • 1 задачу – решили 10 участников

Статистика использование языков программирования при сабмитах:

Язык программированияКоличество сабмитовРешённых задач
C++22725
C#807
Delphi500

< Официальные документы >

Посмотреть
  • Положение об олимпиаде >>
  • Информационное письмо >>

< Языки программирования >

Олимпиада прошла на базе факультета вычислительной техники Пензенского государственного университета

< Этапы >

до 26.04 24:00
1. Регистрация участников
http://softwarecup.ru
27.04 9:00
2. Организационное собрание
ПГУ, учебный корпус 7, аудитория 7б-202
27.04 10:00 - 14:00
3. Основной тур
ПГУ, учебный корпус 7, аудитории 7б-202, 7б-203
28-29.04
4. Подведение итогов
16.0511:30
5. Награждение участников
ПГУ, учебный корпус 1, аудитория а.1-217 (зал диссертационных советов). Победителям необходимо иметь ксерокопию 2-х страниц паспорта: основной и прописки

< Призы >

II место

Nexus 7 16Gb

I место

Nexus 7 32GB 4G

III место

Galaxy Tab 3 Lite

Для участников занявших первые места предусмотрена денежная премия

< Партнёры >

Управление информатизации

Пензенской области

НП "РУССОФТ"

Объединение компаний-разработчиков
программного обеспечения России

МТС

Пенза

Центр кластерного развития

Пензенской области

< Оргкомитет >

Проректор по учебной работе ПГУ, к.т.н., профессор

Механов В.Б.

Зав. кафедрой МО и ПЭВМ, д.т.н., профессор

Макарычев П.П.

Зам. директора НИКИРЭТ

Первушин В.М.

Генеральный директор ООО «Открытые решения»

Кульков И.В.

Генеральный директор ООО «Онлайн системы»

Кручинин А.А.

Доцент каф. МО и ПЭВМ, к.т.н., доцент

Гурьянов Л.В.

Полностью

Зав. каф. ИВС, д.т.н., профессор

Косников Ю.Н.

Зав. каф. САПР, д.т.н., профессор

Бершадский А.М.

Зав. каф. ВиПМ, д.т.н., профессор

Бойков И.В.

Нач. УИТТ ПГУ, к.т.н.

Попов К.В.

Начальник отдела персонала НИКИРЭТ

Шкодина И.Г.

Декан ФВТ, д.т.н., профессор

Фионова Л.Р.

< Жюри >

Доцент каф. МОиПЭВМ, к.т.н., доцент

Гурьянов Л.В.

Аспирант кафедры МОиПЭВМ

Советов Г.А.

Доцент каф. ИВС, к.т.н., доцент

Долгова И.А.

Полностью

Доцент каф. ВТ, к.т.н., доцент

Дорошенко И.Н.

Профессор. каф. ВТ, д.т.н., доцент

Зинкин С.А.

Зам. гл. конструктора по программному обеспечению

Москалянов Е.В.

Pам. гл. конструктора – нач. отделения стационарных систем и комплексов

Царев А.М.

Доцент каф. МОиПЭВМ, к.т.н.

Афонин А.Ю.

Инженер-программист каф. МОиПЭВМ

Волынская К.И.

< Группа научно-методической поддержки >

Ведущий инженер-программист ООО «Открытые решения»

Скаков А.С.

Аспирант кафедры МОиПЭВМ

Костюков А.А.

Аспирант кафедры МОиПЭВМ

Карпов А.Е.

Инженер-программист

Трифонов А.А.

< #SoftwareCup >

< Facebook >