Разбор Codeforces Round #382
Difference between ru1 and ru2, changed 6 character(s)
[problem:735A]↵

Задача на технику программирования. Надо найти на каких позициях находятся кузнечик и насекомое. Если разность позиций не делится на k, то ответ — NO. В обратном случаи надо проверять позиции pos+k, pos+2k, ... , где pos — это минимальная из позиций кузнечика и насекомого. Если где-то есть препятствие, то ответ — NO, в обратном случаи — YES.↵

[problem:735B]↵

Во первых, надо заметить, что n1+n2 "избранные" должны быть люди с top (n1+n2) коэффициентами. Во вторых, если человек с интеллектом C будет в первом городе, то он будет добавить к суммарному коэффициенту IQ C/n1 баллов. Так что, если n1<n2, то top-n1 рейтингов надо "запихнуть" в маленький город, а из остальных top-n2 &mdash; в большой.↵

[problem:736A]↵

Давайте решать обратную задачу: сколько участников как минимум должен участвовать, если чемпион будет провести ровно n матчей. Тогда очевидно есть такая рекуррентая связь: f(n+1)=f(n)+f(n-1) (Сделаем сетку так, чтобы тот, кто победил в последнем матче до этого играл n матчей, а тот кто проиграл &mdash; сыграл (n-1) матчей). Значит, задача сводится к тому, чтобы найти индекс наибольшего числа Фибуначчи, не превосходящую число, данное в вводе.↵

[problem:736B]↵

Первый очевидный факт &mdash; для простых чисел ответ &mdash; 1 (Этот случай надо проифать в первую очередь). Если число не простое &mdash; то ответ по крайней мере &mdash; 2. А когда это возможно? Это возможно в двух случаях &mdash; когда число сумма двух простых или самый большой делитель числа &mdash; 2. Но если 2 делитель, то и n/2 тоже делитель отличные от n (n/2<=2 => n<=4 => n=4 &mdash; n не простое). По [Гипотезе Гольбаха](https://ru.wikipedia.org/wiki/%D0%9F%D1%80%D0%BE%D0%B1%D0%BB%D0%B5%D0%BC%D0%B0_%D0%93%D0%BE%D0%BB%D1%8C%D0%B4%D0%B1%D0%B0%D1%85%D0%B0), которое проверено для чисел не превосходящих 10^9, каждое четное число является суммой двух простых чисел. А нечетное число может быть суммой двух простых чисел, если оно имеет вид 2+p, где p &mdash; простое.↵
В обратное случаи, ответ равен &mdash; 3 (n=3+(n-3), (n-3) является суммой двух простых, так как оно четное).↵

[problem:736C]↵

Скоро.↵

[problem:736D]↵

Эта задача состоит из трех идей. Идея 1: четность этого количества равна четности [определителю матрицы](https://ru.wikipedia.org/wiki/%D0%9E%D0%BF%D1%80%D0%B5%D0%B4%D0%B5%D0%BB%D0%B8%D1%82%D0%B5%D0%BB%D1%8C), которая имеет 1 в позициях (ai,bi) и 0 &mdash; в других позициях (это &mdash; согласно определению). Идея 2: Если заменить одну единицу на нолик, но определитель будет меняться на величину, равную к алгебраического дополнения. То есть, если мы будем считать обратную матрицу то она будет отражать четности дополнений (B(m,n)=A'(n,m)/detA, мы знаем, что detA &mdash; нечетное). Идея 3: обратную матрицу можно найти за O(n^3), что медленно. Для этого мы будем перейти в алгебру по модулю 2, где мы умеем складывать числа с помощью XOR. Для этого мы в одном переменном храним не одно число а 32 &mdash; каждый бит один переменный. Тогда наша асимптотика будет O((n/32)^3), что вполне нормально.↵

[problem:736E]↵

Допустим у нас есть множество (a1,a2,...,am) (уже дополненный список в неубывающем порядке). Тогда &mdash; оно является валидным, если множество {2m-2, 2m-4, 2m-6, ..., 0} [мажорирует](https://ru.wikipedia.org/wiki/%D0%9C%D0%B0%D0%B6%D0%BE%D1%80%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F)          ↵
множество {a1,a2,...,am}.↵
Необходимость: top-n (n<=m) участников между собой играют n(n-1)/2 партий, в котором суммарно собирают 2 балла. В матчах с остальными они суммарно могут набирать 2*n(m-n) баллов (всего игр верхней части против нижней части 2n(m-n)). То есть баллов у них вместе взято будет не больше чем  2*(n(n-1)/2+n(m-n))=2*((m-1)+(m-2)+...+(m-n)) (легко проверить).↵
Достаточность, конструкция примера: Давайте решим как играл чемпион, а потом опустим рекурсию (математически применяем метод математической индукции). Если количество баллов у чемпиона четно (например 2*(m-n) то мы допускаем, что он проиграл у участников занявшие места 2,3,4,...,n и выиграл у остальных). Если у чемпиона количество баллов нечетно (2*(m-n)-1, для некоторого n), то тогда мы предполагаем то же самое, только предполагая, что он играл вничью с (n+1)-ым. Легко проверять, что мажорация сохранится, то есть мы и в конце будем (в случаи n=1) будем иметь множество которая мажорируется множеством {0}, то есть {0} и задача будет решена.↵
То есть алгоритм такой: Сначала доводим наше множество из n элементов к множеству из m элементов. Если это невозможно, то ответ &mdash; NO. В обратном случаи &mdash; ответ YES и надо конструктировать пример как описано.↵
Асимптотика: O(
nm^2lognm) (nm раз мы вызываем рекурсию, каждый раз сортируем (это нам нужна потому что мы можем менять очередь из-за того, что результат игрока первого места может влиять на последовательность),и проходим на него линейно).↵

History

 
 
 
 
Revisions
 
 
  Rev. Lang. By When Δ Comment
en3 English albertg 2016-11-29 01:27:11 46
ru4 Russian albertg 2016-11-29 01:25:20 18
en2 English albertg 2016-11-28 22:40:13 924
ru3 Russian albertg 2016-11-28 22:32:28 862
ru2 Russian albertg 2016-11-27 23:42:58 6 Мелкая правка: 'тотика: O(n^2logn) (n раз мы вы' -> 'тотика: O(m^2logm) (m раз мы вы'
en1 English albertg 2016-11-27 23:40:58 4299 Initial revision for English translation
ru1 Russian albertg 2016-11-27 22:56:18 4907 Первая редакция (опубликовано)