№ | Пользователь | Рейтинг |
---|---|---|
1 | tourist | 4009 |
2 | jiangly | 3823 |
3 | Benq | 3738 |
4 | Radewoosh | 3633 |
5 | jqdai0815 | 3620 |
6 | orzdevinwang | 3529 |
7 | ecnerwala | 3446 |
8 | Um_nik | 3396 |
9 | ksun48 | 3390 |
10 | gamegame | 3386 |
Страны | Города | Организации | Всё → |
№ | Пользователь | Вклад |
---|---|---|
1 | cry | 167 |
2 | maomao90 | 163 |
2 | Um_nik | 163 |
4 | atcoder_official | 161 |
5 | adamant | 159 |
6 | -is-this-fft- | 158 |
7 | awoo | 157 |
8 | TheScrasse | 154 |
9 | nor | 153 |
9 | Dominater069 | 153 |
Название |
---|
Ребят, в арену не заходит :(
Пишет "Error, system is offline".
У меня только что зашло.
Как решать 500(div1)?
Заметим, что пары строк, которые нас интересуют — это такие строки, что одна из них получается циклическим сдвигом из второй. Давайте считать, сколько в алфавите из k букв есть строк длины N с количеством различных циклических сдвигов равных L. Это равносильно тому, что нам нужно посчитать, у скольки строк период равен L. Значит, L — делитель N. Для того, чтобы посчитать количество строк с периодом L, используем что-то вроде принципа включений-исключений:
f(L) = kL-(сумма f(c) таких, что с — делитель L и с меньше L)
Чтобы узнать ответ, суммируем для каждого делителя N значение f(L) * L (для каждой строки ставим в пару ее циклический сдвиг)
а ещё на прямую по принципу включений-исключений
Как решать 950 (div. 2) ?
1000 в див1, верно ли что достаточно завести вектора количества вхождений каждного элемента, и затем их перемножить и найти в какой позиции самое большое число?
Нет конечно. Верно то же удтверждение, если бы произведение 2х чисел было операцией минимума
Как тогда решать? :)
static final int BUBEN = 10;
Объяснять дальше? :-)
У меня в дорешке n * sqrt(n) * log(n) тлешится, чуть-чуть не пролазит в 4 сек на двух тестах. А те кто сдали, с какой ассимптотикой это сделали?
Ну если я понимаю правильно, то решение у Егора такое:
Сначала возьмем каждого числа по одному, и с помощью Фурье (когда чисел по одному, мое утверждение выше с произведением и ответ Егора с минимумом -- это по существу одно и тоже) найдем все их попарные суммы. Затем уменьшим количество вхождений каждого числа на один. Повторим это 10 раз. Остались только числа, которые встречаются по 11 раз и более, их, очевидно, не более 10К, их попарные суммы находятся за квадрат.
Получается 10*n log n + 10K^2.
У меня n^2 в дорешке прошёл...
Можно ли решить 250(div1) через ДП по дереву?
Понятно, что одним ходом можно закончить игру, оставив какой-нибудь лист. Тогда рассмотрим логику первого игрока. Он может всегда взять какой-нибудь лист. Ответ — это вес самого тяжелого листа. Предположим, что первый игрок может взять больше, чем самый тяжелый лист. Тогда он первых ходом не закончить игру, а отрежет кусок дерева. Понятно, что одним разрезом удалить все начальные листья нельзя. Тогда второй игрок своим ходом закончит игру, так как тогда результат будет не больше, чем наибольший лист, а первый игрок хочет больше. Таким образом лучшая стратегия — это первым же ходом отрезать наибольший лист.
Я сдавал такое же решение.
Но интересно можно ли было решить эту задачу именно динамикой по дереву. Вариант перебрать ребро и разбить на 2 подзадачи не срабатывает в данном случае.
Editorial