Блог пользователя map

Автор map, 10 лет назад, По-русски

Привет, Codeforces!

31 января в 15:00 MSK состоится раунд #289 для участников из второго дивизиона. Традиционно, участники из первого дивизиона могут участвовать в соревновании вне конкурса.

Этот раунд отличается от остальных тем, что он будет проведен по правилам АСМ, то есть результаты проверки на всех тестах вы получаете в режиме онлайн, а его продолжительность составит 3 часа.

Данные отличия в правилах вызваны тем, что этот раунд является вторым отборочным раундом в ЗКШ. Официальный сайт школы — http://it-edu.mipt.ru/zksh2015. Там же вы можете найти правила отбора на ЗКШ.

Алгоритм действий для школьника, желающего поучаствовать в отборе на ЗКШ (вне зависимости от дивизиона):

  1. Зарегистрироваться на школу по ссылке http://goo.gl/kz2qSf, если это не было сделано ранее.
  2. Зарегистрироваться на сайте codeforces.ru, если это не было сделано ранее.
  3. Зарегистрироваться на раунд по ссылке http://mirror.codeforces.com/contestRegistration/509. При регистрации требуется поставить галочку в поле "Хотите ли вы участвовать в отборе на ЗКШ?", а также указать фамилию, имя, отчество и email, которые вы указали при регистрации на школу в пункте №1.

По всем возникающим вопросам пишите на адрес оргкомитета: zksh-team@phystech.edu.

В заключение, наш коллектив авторов (тех. комитет ЗКШ) выражает свою благодарность Максиму Ахмедову (Zlobober) за помощь в подготовке задач, Марии Беловой (Delinur) за перевод условий на английский, Михаилу Мирзаянову (MikeMirzayanov) за вклад в развитие программирования путем создания систем Codeforces и Polygon.

Полный текст и комментарии »

  • Проголосовать: нравится
  • +155
  • Проголосовать: не нравится

Автор map, 11 лет назад, По-русски

Доброго времени суток! Подскажите, пожалуйста, куда можно сдать пересечение полуплоскостей в 2D.

Полный текст и комментарии »

  • Проголосовать: нравится
  • +13
  • Проголосовать: не нравится

Автор map, 13 лет назад, По-русски

Здравствуйте! Я хотел бы затронуть тему о развитии сильных спортивных программистов. Многих интересует, как люди попадают на финал ACM ICPC или, например, получают 2200+ на Codeforces/Topcoder. В связи с этим, прошу всех, кому есть что сказать по данной теме, а в особенности вышеуказанную категорию людей, ответить на вопросы:

  1. Сколько времени вы занимаетесь СП?
  2. Что Вам дало наибольший толчок и когда?
  3. Какие ресурсы-архивы сейчас решаете (и как бы могли их охарактеризовать: acm.sgu.ru, acm.timus.ru, codeforces, topcoder и т.п.)?
  4. Какой язык программирования и среду сейчас используете (по возможности с кратким (или полным) комментарием)?
  5. Сколько часов в неделю вы тратите на СП (в том числе постоянны ли ваши тренировки, или они сезонные и направлены для успешного выступления на определенном соревновании)?
  6. Какой способ подготовки к серьёзным личным соревнованиям вы предпочитаете?
  7. Что Вас больше всего мотивировало во время вашего развития и мотивирует по сей день?
  8. Определяющие факторы для достижения успеха в СП?

9*.Дополнительные комментарии по этой теме.

На codeforces.ru есть много отдельных постов, в какой-то мере отражающих тематику, но мне хотелось бы все собрать в одном месте.

Единственная смежная содержательная запись в блоге, которую я знаю.

Просьба особо не флудить.

Примечание: Используется сокращение "СП" — "спортивное программирование".

Полный текст и комментарии »

  • Проголосовать: нравится
  • +50
  • Проголосовать: не нравится

Автор map, 13 лет назад, По-русски

Как научить msvs выводить все warning-и при построении по умолчанию?

Для конкретного проекта это несложно: нужно просто в свойствах проекта.
Либо /wall в компилятор засунуть, либо в прагме написать
#pragma warning(default :4) - http://msdn.microsoft.com/en-us/library/23k5d385(v=vs.100).aspx - не помогает.
Вероятно, нужно просто поменять стандартную конфигурацию debug-а.
Тестить, что все получилось можно строчкой вида "if (a=b){}"

И, пожалуйста, не надо писать, что "вижак - говно" и т.п.

Полный текст и комментарии »

  • Проголосовать: нравится
  • +4
  • Проголосовать: не нравится

Автор map, 13 лет назад, По-русски
В 3 раунде объясните пожалуйста решение задачи В. Вроде просто считать динамику d[k][i][j] - ответ, если нажали К клавиш, и наши пальцы на i, j.

Полный текст и комментарии »

  • Проголосовать: нравится
  • +6
  • Проголосовать: не нравится

Автор map, 13 лет назад, По-русски
  1. http://mirror.codeforces.com/contest/140/submission/1000181 :
  2. #include<stdio.h>
  3. #include<string.h>
  4. #include<math.h>
  5. #define esp 1e-8
  6. int n,a,b;
  7. double c,cc;
  8. int main(){
  9.     int m;
  10.     scanf("%d%d%d",&n,&a,&b);
  11.     if (n==1){
  12.         if (a>=b) printf("YES\n");
  13.         else printf("NO\n");
  14.         return 0;
  15.     }
  16.     cc=asin(1.0)*2.0/(double)n;
  17.     c=asin(b/(a-b+0.0));
  18.     if (c<cc+esp) printf("YES\n");
  19.     else printf("NO\n");
  20.     return 0;
  21. }

n = a = b = 5 - при взломе выдало "NO".
c=asin(b/(a-b+0.0));  - довольно странно должно было посчитаться.

Полный текст и комментарии »

  • Проголосовать: нравится
  • +1
  • Проголосовать: не нравится

Автор map, 14 лет назад, По-русски
Стандартно: подскажите пожалуйста, как решать задачу С.
И N.

Полный текст и комментарии »

  • Проголосовать: нравится
  • +1
  • Проголосовать: не нравится

Автор map, 14 лет назад, По-русски
Подскажите пожалуйста, как решать задачу С.

Полный текст и комментарии »

  • Проголосовать: нравится
  • 0
  • Проголосовать: не нравится

Автор map, 14 лет назад, По-русски

Задача А.

В этой задаче нужно было лишь удостовериться, что ∑xi  = 0, ∑yi  = 0 и ∑zi  = 0.

Явно это условие не писали, чтобы у участников была возможность для взломов.

 

Задача B.

В этой задаче, фактически, требовалось найти победителя на каждом этапе. Для каждого участка это делается полным перебором всех участников для нахождения участника с минимальным временем прохождения участка, который бежал этот участок. Асимптотика решения O(nm).

 

Задача C.

В этой задаче требовалось после каждой покупки обновлять набор артефактов у всех друзей Кости. Нужно завести матрицу c[i][j] – количество j-ого базового артефакта, требуемого для того, чтобы собрать i-ый составной артефакт. Далее можно было завести матрицу составных артефактов, где a[i][j] – количество j-ого базового артефакта у i-ого друга и аналогичную матрицу b составных артефактов, и после каждой покупки  i-ого друга проверять собрался ли у него какой-нибудь составной артефакт за O(MN). Для этого нужно проверять собрался ли один составной артефакт за O(N). Это делается следующим образом: для i-ого друга нужно проверить, существует ли u, что c[j][u] > a[i][u]: если да, то j-й артефакт не будет собран, если нет, то нужно увеличить b[i][j] и обновить значения в a[i]). То есть асимптотика обработки всех покупок O(NQM). Далее требуется для каждого человека составить список артефактов, храня при этом их количество(суммарно O(KN + KM), которые у него есть, и отсортировать его (суммарно O(QlogQ)).

 

Задача D.

Данная игра конечна, так как за исключением конечного количества(2) отражений относительно прямой y=x, координаты изменяются на неотрицательное целое число (причем минимум 1 координата изменяется на положительное число).

Алгоритм решения этой задачи – DFS/BFS по состояниям, где состоянием является пара координат и две логических переменных, обозначающих то, отражал ли уже 1 (2) игрок точку относительно прямой y=x.

Всего состояний получается S <= 4D2 (пар координат) * 4(значений булевых переменных).

Обработка одного состояния занимает O(N) действий (только не нужно забывать пробовать отразить точку относительно прямой y=x, если данный игрок это ещё не сделал ранее в ходе игры). Таким образом, общая асимптотика O(ND2), что работает на С++ менее 200мс.

 

Также можно было заметить, что отражения не играют на исход игры, так как если в игре без отражений у игрока есть выигрышная стратегия, то он победит ,если будет ей следовать, использовав свое право отражения точки относительно прямой только после того, как соперник сам «отразит» точку.

 

Задача Е.

Для решения этой задачи требуется постепенно «передвигать» подотрезок и поддерживать:

1)множество В чисел, встречающихся один раз с функцией извлечения максимума за O(logN),

2)множество А чисел, встречающихся на данном подотрезке с хранением количества раз, которое данное число встречается на данном подотрезке с функцией проверки того, сколько раз встречается число на данном подотрезке за O(logN).

При движении отрезка с (a[i] .. a[i + k – 1]) на 1 элемент влево(a[I + 1]..a[I + k]) требуется:

1) Проверить, совпадает ли a[i]  с a[I + k]. Если да, то не требуется изменять множества,  иначе переходим к п.2 и 3.

2) Проверяем в множестве А, сколько раз встречается a[i]: если 2, то добавляем a[i] в В, если 1, то удаляем из A и В. Не забываем уменьшить соответствующее количество вхождений a[i] в текущий отрезок на 1.

3)Проверяем в множестве А, сколько раз встречается a[I + k]: если 0, то добавляем a[i] в В и в А, если 1, то удаляем из В. Не забываем увеличить соответствующее количество вхождений a[i] в текущий отрезок на 1.

 После этого, если множество В не пусто, извлекаем из него максимум.

Таким образом, асимптотика алгоритма O(NlogN). В качестве таких структур данных подходит set/map для тех, кто пишет на С++, и декартово дерево.

Полный текст и комментарии »

Разбор задач Codeforces Beta Round 63 (Div. 2)
  • Проголосовать: нравится
  • +31
  • Проголосовать: не нравится

Автор map, 14 лет назад, По-русски

Здравствуйте!

Сегодня автором задач являюсь я. На контесте Вам будет предложено помочь Челябинским школьникам в решении их нетривиальных проблем.

Выражаю благодарность всем тем, кто помогал готовить раунд: Антону Гардеру за неоценимую помощь в составлении комплектов задач,  Демиду Кучеренко за помощь в составлении условий, Артему Рахову за координирование действий и терпение : ), Марии Беловой за перевод и Михаилу Мирзаянову за великолепную систему.

Всем удачи!

Победитель - Solo.

Разбор - http://mirror.codeforces.com/blog/entry/1571

Полный текст и комментарии »

  • Проголосовать: нравится
  • +51
  • Проголосовать: не нравится