№ | Пользователь | Рейтинг |
---|---|---|
1 | tourist | 3993 |
2 | jiangly | 3743 |
3 | orzdevinwang | 3707 |
4 | Radewoosh | 3627 |
5 | jqdai0815 | 3620 |
6 | Benq | 3564 |
7 | Kevin114514 | 3443 |
8 | ksun48 | 3434 |
9 | Rewinding | 3397 |
10 | Um_nik | 3396 |
Страны | Города | Организации | Всё → |
№ | Пользователь | Вклад |
---|---|---|
1 | cry | 167 |
2 | Um_nik | 163 |
3 | maomao90 | 162 |
3 | atcoder_official | 162 |
5 | adamant | 159 |
6 | -is-this-fft- | 158 |
7 | awoo | 155 |
8 | TheScrasse | 154 |
9 | Dominater069 | 153 |
10 | nor | 152 |
Название |
---|
Решать надо с конца, т.е. выполняются обратные операции.
Нужно делать операцию double порядке O(Log(N)). А front и back использовать, чтобы можно было провести очередную double.
если я не ошибаюсь, то можно любую такую строку сделать за не более, чем (Log2(N) + 1) * 5
С) - динамика нужно посчитать для каждого n и k вероятность того что мы сделаем параллельных k запусков на отрезке из n не запущенных ракет. Переход за O(n) . В итоге O(n^3)
H) Рассмотрим орграф который задает эта матрица. Тогда операция описанная в условии это просто перенумеровка вершин в этом орграфе. Получается нужно найти такой порядок вершин чтобы в первую вершину не входило ребер вообще, во вторую вершину могли входить только ребра из первой вершины и.т.д. Это можно сделать, например топологичесокой сортировкой (очевидно что если в графе есть цикл то ответ -1). В итоге получим нужную перестановку, потом просто разбить ее на <= n транспозиций и выдать как ответ.
I) Рассмтрим все последовательности длины <= n которые можно получить из 0 или 1 за 1,2,..log(n) операций double. Получим O(logn) строк для каждой из них можно через КМП найти все вхождения в нашей финальной строке за O(nlogn). Дальше динамика - нужно разбить нашу строку на строки описанные выше причем так чтобы сначала их длинны не убывали а потом не возрастали . Это Можно сделать за nlogn
Не мог бы кто нибудь более подробно объяснить динамику для задачи C ?
у нас получилось через две решить, первая
dm1[n][k] - вероятность того, что мы запустим n подряд идущих ракет не более чем за k залпов.
dm2[n][k] - вероятность того, что мы запустим n подряд идущих ракет ровно за k залпов.
Одно состояние каждой динамики пересчитывается за линию, т.е. переберем ракету, которая взлетит, с позиции от 2 до n - 1, и не забыть посчитать вероятности для крайних ракет . Кстати у нас не прошла рекурсия, пришлось прекалк сдавать либо, снизу вверх считать.
Upd. dm1[n][k] = Сумма dm2[n][i] по i = 1..k
ну вот поразбирайся только тут dm1 и dm2 наоборот как я писал
bool operator < (const mag &m) const {
return a > m.a || (a == m.a && (b > m.b || (b == m.b && c < m.c)));
}
Рассмотрим по оереди моменты времени 0, 1, ..., 1000. Для каждого момента попробуем из очереди взять не более k элементов и каждый обработать следующим образом: увеличить a на 1, уменьшить c на 1 (и запоминаем, в какой момент времени побрили определённого мага); если c стал 0, значит, мага побрили полностью; если c больше 0 и всё ещё a < b, вставляем обратно в очередь; если a = b и c > 0, то этого мага второй раз побрить уже никак не получится, выводим "
No
", завершаем работу. Если после 1000 итерирований мы ещё не вывалились, значит все побриты, выводим "Yes
" и весь заранее запомненный список.И как я понял сначала рассматриваются элементы с большим приоритетом?
Например, если есть маги (2, 4, 1, 1), (3, 4, 2, 3) , (3, 4, 1, 2) (по форме (a, b, c, n)), то в таком порядке, слева направо, они и будут взяты из очереди.
http://acm.timus.ru/forum/thread.aspx?space=1&num=1774&id=25330&upd=634229362011113750
Получалась не сложная линейная динамика) Т.е. если i-бит в числе k равно 1, то (i-1)-биты числа k и k-ого числа грей противоположные, иначе одинаковые. Отсюда и вытекает динамика :)
В H у меня решение - вообще идти от последней строки к первой, и всякий раз на место текущей строки ставить одним свопом любую из подходящих (среди предыдущих) строк.
Доказательство - во-первых, что решив задачу для последней строки, ничего не нарушится для неё потом. Во-вторых - почему для получения последней строки нет смысла рассматривать какие-то сложные цепочки операций, а только одним свопом - это я понимаю скорее интуитивно, порисовав на бумажке :)
K - решал динамикой по состоянию - позиции в каждой из колод (т.е. 13^4). Ключевое - считать, что все остальные карты (которые мы извлекали из этих 4 колод) всегда сложены оптимально (т.е. все куски, которые можно объединить в одну колоду, уже объединены). Но решение выходит неприятное по реализации, много тонкостей.
Расскажу наши решения)
А - то, что сказано выше - я приделал каждому магу время финиша и сколько еще раз его надо побрить) Потом шел по времени и обрабатывал их жадно в порядке появления - если время окончания неравно, то перым бреется тот, у кого оно меньше, если равно, то тот, кому надо бриться больше раз)
В - не успел додебажить) Мы сперва писали сеточку - получили ВА 35) потом придумали нормальное решение, но уже не успели - сжимаем все курги в точки, перебираем все пары точек, на них строим прямую - она даст угол наклона - потом сортим все точки по этому углу и находим К-ую от нашей прямой - и релаксируем ответ. В принципе сортить не обязательно - Кая порядковая статистика сделает сложность О(n^3)
C - Писал не я, но решение - ДП, которое было описано выше
D - Легкая задача - просто моделируем то, что написано, предположив/доказав, что нам потребуется мало шагов до нахождения ответа
E - вообще не знаю как
F - abs( i - j ) <= n/2 - вроде так
G - по факту k[i-1] xor k[i] xor x[i] = 0 - из этого я сделал ДП по i и маске битов. Значения 0 - нельзя получить, 1 - можно одним способом (запомним маску откуда ), 2 - несколькими способами) Отсюда в конце найдем ответ
H - Я написал топосорт по матрице - то есть как сказали в разборе - это граф и надо сделать топосорт. Искал нулевой столбец ( вершину с 0 степенбю ) и ставил ее вперед и тд.
I - Писал решение описаное выше - 5 операций на шаге)
J - Влоб - писал бин поиск - и находил для каждого шага ответ.
К - Идем по картам снизу вверх - смотрим 2 профиля - на них ищем перестановку и смотрим число циклов длины > 1. Для каждого цикла увеличим ответ на длину цикла + 1
Как то так мы и решали)