Давайте обсуждать задачи здесь.
Корректный ли был тест номер 6 в задаче G?
ADD: И как решать B?
ADD: ссылка на условия
№ | Пользователь | Рейтинг |
---|---|---|
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 | Um_nik | 163 |
3 | maomao90 | 162 |
3 | atcoder_official | 162 |
5 | adamant | 159 |
6 | -is-this-fft- | 158 |
7 | awoo | 157 |
8 | TheScrasse | 154 |
9 | Dominater069 | 153 |
9 | nor | 153 |
Давайте обсуждать задачи здесь.
Корректный ли был тест номер 6 в задаче G?
ADD: И как решать B?
ADD: ссылка на условия
Название |
---|
Как решать I?
Сначала вычтем из каждой score по n - 1, теперь победа стоит 1, ничья 0, поражение -1. И построим такую сеть между вершинами(игроками). Пропускная способность между вершинами i и j: c[i][j] = 1, тогда когда score[i] > score[j] и добавим исток и сток. От истока будут идти ребра во всех игроков i с положительным score[i] и пропускной способностью score[i] и от каждой вершины i с отрицательным score[i] в сток с пропускной способностью - score[i]. Теперь найдем макс поток и проверим является ли он суммой положительных score и если все ок выведем потоки между игроками
по поводу задачи В: найдем для каждого центра палиндрома макс. длину палиндрома. Теперь возьмем для каждого центра половину макс. палиндрома и отсортируем все эти подстроки (с началом в центрах) лексикографически с помощью хешей. Теперь для каждых двух соседних осталось посчитать lcp — тоже хешами. Получается аналогия с суффиксным массивом и задачей "Найти количество различных подстрок в строке" и решение за O(nlog2(n)). При таких ограничениях должно зайти.
Кажется в этом случае нужно быть аккуратными с четностью палиндромов и пустыми строками.
Решение за O(N (1 + set)):
Найдем для каждой позиции максимальный палиндром, заканчивающийся в ней. Очевидно, что все остальные палиндромы, заканчивающиеся здесь уже рассмотрены для одной из предыдущих букв. Сделать это можно небольшой модификацией этого алгоритма. — записать момент, когда r = текущий символ.
Далее скидали хеши в сет. Посмотрели размер сета.
действительно, можно решать отдельно для четных и нечетных палиндромов
UPD ага, удивительно похоже на задачу с ПТЗ))
А можно код посмотреть? А то во время тура валилось на 18 тесте.
Вполне. 47, ответ равен 8 (числа 1 1 1 1 1 3 10 704).
Почему это правильный ответ?
Потому что авторское решение, выдающее этот ответ — полный перебор. Будем пытаться перебирать все подходящие неубывающие последовательности сперва длины 2, затем 3 и т.д, пока не сможем получить искомую последовательность.
Перебор будем делать следующим образом. Введем определение "характеристика последовательности" — произведение вида . Очевидно, что при росте ai характеристика будет уменьшаться и что характеристика всей последовательности, являющейся ответом, равна n. Зафиксируем элемент последовательности (назовем его текущим). Если характеристика последовательности от начала до текущего (не включая его) больше n, то дальше перебирать смысла не имеет (потому что дальше она будет только расти). Иначе же делаем следующее:
Ну и, понятно, что как только мы получили последовательность нужной характеристики и нужной длины — выходим. Для оптимизации, если текущий элемент — последний, его можно не перебирать, а получить сразу следующим образом: положим l = Пi = 1k - 1(ai + 1), r = Пi = 1k - 1ai. Тогда если нужное нам последнее число равно x, то l(x + 1) = n * r * x, откуда x легко находится или определяется, что он не существует.
поверим, что багов в коде нет :)
В этом случае можно огласить идею решения и сообственно доказательство ответа (почему не 7 к примеру)?
Уже. Быстро это не напишешь :)
Как в H Cnk обойти?
Не нужно его обходить — можно просто их посчитать в лоб через факториалы. Считать-то их не больше 10 раз придется.
Мы же считаем по модулю 109 + 7. Как учитывать это при делении на k!?
С помощью расширенного алгоритма Евклида
По-моему, можно ещё проще сделать. Посчитать обратный элемент для числа k! по модулю 109 + 7. Для этого нужно, с помощью бинарного возведения в степень, возвести k! в степень 109 + 7 - 2 (это следует из малой теоремы Ферма).
Собственно говоря, если перейти по ссылке, то там это написано.
А как решать F? И почему для теста 1 2 3 ответ 0? Вроде ведь можно представить так
if (a != c) puts("0"); else cout << 2 * a * (b + c)
А почему мой пример не подходит?
Challenge successed. Для условия :) Согласен, оно написано коряво и ваш пример ему соответствует. Разумеется, также имелось ввиду, что все точки должны лежать на горизонтальной прямой по одну сторону от A.
Обозначать многоугольник принято по порядку обхода вершин. Поэтому условию задачи, в котром говорится о прямоугольнике ABCD, не соответствует ни чертёж к приимеру из условия (ABDC), ни приведённый контпример (ACBD).
У вас тут получился прямоугольник ACDB или ADCB, а там написано что прямоугольник должен быть ABCD. То-есть у вас тут точка B противоположна точке A, а они должны быть соседними.
Замечу, что в примере к задаче прямоугольник тоже ACDB.
Как делать А. Моя динамика упирается в ML(((
Использовать только две строчки.
Написал динамику получил ML, поставил заместо таблицы map получил TL, убрал map поставил хэш-таблицу получил AC.
Хотя подозреваю что есть решение гораздо проще:)
Есть.
Формула где-то ниже, а вот ее док-во: Пусть в каком-то представлении числа n есть хотя бы одна единица (g^0). Тогда этому представлению можно однозначно поставить в соответствие представление для n-1 без этой единицы. Собственно, из любого представления для n-1 можно получить представление для n, просто добавив туда единицу. Очевидно, что все полученные представления различны и для любого представления n с хотя бы одной единицей есть прообраз — представление для n-1. Таким образом, кол-во представлений для n, в которых есть хотя бы одна единица — А(n-1).
Пусть есть представления без единиц. Тогда
Итого if (n mod g=0) then A(n)=A(n-1)+A(n div g) else A(n)=A(n-1).
Можно было заметить красивую формулу: