пятница, 3 апреля 2020 г.

Международные сборы по программированию

eu-DnqnHOPU  


Центр развития ИТ-образования МФТИ приглашает ваши команды принять участие в Международных сборах по программированию Moscow Pre-Finals Workshop, которые пройдут с 18 по 26 апреля при поддержке Университета ИТМО. В связи с эпидемиологической обстановкой в мире, этой весной мы вынуждены полностью отказаться от очного проведения сборов на площадке Физтеха. Moscow Pre-Finals Workshop пройдет с полным сохранением образовательной программы в онлайн-формате.
Обучение будет проходить на английском языке в формате двух дивизионов:
  • Дивизион А – для опытных команд с серьезным уровнем подготовки, которые участвуют в финале ICPC.
  • Дивизион B – для тех, кто готовится к участию в следующем сезоне.
В режиме онлайн команды получат полный доступ к учебной программе:
  • доступ к контестам в течение трех месяцев с начала сборов (каждый контест открывается практически одновременно с началом контеста в МФТИ);
  • видеотрансляции и текстовые материалы разборов контестов;
  • видеотрансляции и текстовые материалы лекций (для дивизиона В);
  • электронный сертификат о прохождении сборов.
Расписание включает в себя RuCode Festival (в прошлом - MosCode), который пройдет 25 и 26 апреля в онлайн-формате.
Цена удаленного участия —  51000 рублей на одну команду для участников из стран ЕАЭС. Для участников из остальных стран стоимость составит $690 на команду. Также мы ввели систему скидок, которая позволит многим командам поучаствовать в сборах с большой скидкой или бесплатно. Обратите внимание, если команда хочет претендовать на скидку за участие в контесте 4 апреля, ей необходимо зарегистрироваться на удаленное участие в сборах, тогда перед началом контеста ей будет выслан логин и пароль. 
Дистанционный формат никак не повлияет на качество самих сборов. Наша команда и тренеры Moscow Workshops приложат все усилия, чтобы обеспечить командам полную информационную поддержку и комфортное обучение.

Чтобы участвовать в сборах дистанционно, нужно пройти регистрацию:
Регистрация для команд из стран ЕАЭС
Регистрация для команд из остальных стран
Если у вас остались вопросы, будем рады на них ответить!

понедельник, 18 ноября 2019 г.

Разбор задач


A.                  Ревизия


В пяти городах A, B, C, D и E требуется провести документальную ревизию. Для осуществления этой ревизии необходимо составить и издать приказ о ее проведении. Одним из пунктов в приказе является время командировки ревизора (лица, осуществляющего проверку в городах A, B, C, D, E).
Данная таблица содержит информацию о том, сколько времени занимает путешествие между каждым из городов.
Ревизор должен посетить каждый из городов, при этом вернуться в тот, с которого он начал свою проверку.
Так, например, маршрут A-B-C-D-E-A удовлетворяет условиям поставленной перед ревизором задачей, а длительность командировки, при таком маршруте, равна 9+27+11+20+8 = 75. Маршрут A-B-C-D-E не является правильным, так как ревизор не вернулся в город A.

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

Ответ: 65

B.                  Головокружительные числа


Маша – большая поклонница всевозможных кругов, кружочков и окружностей. Она старается разглядеть их во всем, что ее окружает. А еще она очень любит гармонию и математику. Не обошла она своим вниманием и числа, решив для себя, что будет считать "округлым" лишь то число, которое содержит в своей записи столько кружков, из скольки цифр оно состоит. Например, число 678 – "округлое", а 12678 таковым не является. А если еще при этом в числе в первой и последней цифре количество кругов совпадает, то это вообще "головокружительное" число. Написать программу проверки числа на "округлость" и "головокружительность".

Разбор. Нужно было аккуратно посчитать кружочки в цифрах числа и количество цифр числа и обработать все случаи. Проблемы: возникли у участников, которые писали решение на Питоне, входную строку нужно было обработать при помощи int(input())  или
убрать перевод строки с помощью метода strip: input().strip().

C.                  Транспортировка


На складе лежат N ящиков с товарами, их веса равны .

К складу подъехали две машины, чтобы доставить эти товары в магазин. Требуется загрузить ящики в эти две машины так, чтобы веса перевозимых ящиков (вес ящиков в более загруженной к весу ящиков в менее загруженной) в них отличались не более, чем в D раз. Если разделить ящики таким образом возможно, вывести Yes, иначе No.

Разбор. Известная задача с Тимуса. Решается с помощью перебора. Можно кодировать ящики в первой машине нулями, а ящики во второй единицами, и брать оптимальное соотношение весов.
Жадный алгоритм не оптимален. Попробуйте, например, распределить оптимально ящики с весами  5 5 4 3 3 жадным алгоритмом.

D.                  Числа – палиндромы

Будем называть число палиндромом, если оно одинаково читается слева направо и справа налево. Например, числа 6, 232 и 1221 - это палиндромы, а число 3210 - нет. Для заданного числа N выведите первое число такого вида, которое строго больше N.

Разбор. Известная задача. Использовалась ранее на муниципальных олимпиадах.
Превращаем считанное число в палиндром, переписывая цифры из первой половины строки в обратном порядке во вторую половину строки. Если число получилось меньше исходного — увеличиваем первую половину числа на 1 и снова превращаем его в палиндром.

E.                  Подпоследовательность

Для заданного набора целых чисел найдите подпоследовательность минимальной длины, сумма элементов в которой делится без остатка на 1000000.

Разбор. Известная задача. Использовалась ранее на муниципальных олимпиадах.
Рассмотрим частичные суммы элементов последовательности от ее начала до i-го элемента
включительно. Так как нас интересуют остатки от деления суммы на 1000000 и из свойства остатков
известно, что (X+Y) mod M= ((X mod M) + (Y mod M)) mod M, можно рассмотреть не сами суммы, а их остатки от деления. Так как нас интересует остаток равный 0, мы должны найти в последовательности остатков частичных сумм ближайшие одинаковые значения (если остатки одинаковы, значит остаток для суммы элементов подпоследовательности между ними равен 0). Для этого для каждого остатка нужно запоминать позицию, когда этот остаток встречался и находить минимальный вариант для разницы позиций.

F.                  Подпоследовательность - 2

Наибольший общий делитель двух чисел вычисляется по формуле: НОД(a,b)=a, если b=0; НОД(a,b)=НОД(b, a mod b), если b>0. НОД нескольких чисел вычисляется последовательным применением НОД к парам чисел: НОД(a,b,c)=НОД(НОД(a,b),c), НОД(a)=a.
Посчитайте, сколько различных значений принимает наибольший общий делитель для всевозможных последовательностей вида , где 1≤ i ≤ j ≤ N в последовательности .

Разбор. Известная задача. Использовалась ранее на муниципальных олимпиадах.
НОД подпоследовательности чисел не может возрастать при добавлении очередных элементов в подпоследовательность и таким образом не может принять более
log2(1018) значений (примерно 60).
Пусть  Di = { НОД(aj , . . . , ai ) | j ≤ i }, при этом размер Di не превышает O(log2 (ai) ).
Тогда можно рассчитать D i+1 = { gcd(v, a i+1) | v Di } { ai+1}
Время работы алгоритма O(N log22(1018)).

воскресенье, 17 ноября 2019 г.

Результаты XXI Открытого чемпионата СГУ по программированию

XXI Чемпионат по программированию «ПЕРВОКУРСНИК»

Начало: 16 ноя 2019, 12:25:00
Конец:   16 ноя 2019, 16:25:00
Длительность: 4 часа

Участник
A
33/93
B
23/135
C
4/33
D
1/83
E
1/6
F
0/7
Очки
Штраф
1
Нестеров Дан

+

+


+


5
452
2
Размыслов Константин




3
371
3
Федоров Павел


+


3
377
4
Копосов Вячеслав
+

+

2
53
5
Филиппов Денис
+

+

2
55
6-7
Арсеньев Виктор
+

+


2
57
6-7
Тимошенко Аксинья
+

+

2
57
8
Глебова Ирина
+

+


2
60
9
Попов Иван
+

+


2
63
10
Матвийчук Богдан
+


2
71
11
Смоленцев Антон
+

+

2
88
12
Губанов Денис


2
139
13
Андрюков Арсений





2
183
14
Хилько Павел




2
206
15
Богдан Арсений




2
242
16
Ушаков Иван Сергеевич
+


2
262
17
Некрасова Лена




2
287
18
Степанова Ольга
+

+


2
321
19
Яруков Дмитрий


2
339
20
Сибилев Алексей
+




2
475
21
Бондаренко Анатолий



2
684
22
Островский Максим
+


1
11
23
Козлов Иван Евгеньевич

+

1
24
24
Игнатович Вадим
+


1
33
25
Поповцев Никита
+


1
34
26
Агарков Вадим



1
49
27
Поздин Михаил


1
66
28
Магац Александр
+


1
74
29
Денисов Александр



1
86
30
Пувкоева Таисия
+



1
160
31
Прошева Яна
+


1
181
32
Корчагин Юрий


1
213
33
Стрекалов Ростислав
+


1
218
34
Изъюров Степан


1
235
35
Григорьев В. С.


1
249
36
Ищук Виталий


1
315
37-40
Попел Семен


0
0
37-40
Рочев Алексей


0
0
37-40
Кожагельдиев Никита



0
0
37-40
Пащак А. А.

0
0