А. Провинился — на кухню.
В задаче нужно было понять, какое максимальное x, упомянутое в условии, можно взять, чтобы каждого из ингредиентов хватило. Ясно, что это x = min(b_i / a_i). Осталось взять минимум из двух объемов — получившегося объема супа и объема кастрюли.
В. Незаконченная партия.
В этой задаче нужно было проверить ровно то, что сказано в условии: позиция короля и все позиции на доске, в которые он может пойти находятся под ударом, — значит, мат. Таким образом, нужно было правильно определить на доске позиции под ударом. Для этого поставим на доску только белые ладьи и белого короля, клетки, в которые может пойти король, отметим как битые, клетки, на которых стоят ладьи, оставим небитыми (чтобы черный король мог есть ладей), а клетки, до которых могут добраться ладьи, — тоже отметим как битые.
С. Взлом сейфа.
Ответ в этой задаче всегда положительный, то есть четыре единицы получить можно всегда. Действуя жадно (то есть делая операциями соседние числа четными и деля их на два), легко за логарифмическое (и получающееся, конечно, меньше 1000) количество операций добиться того, что сумма чисел будет не больше шести и дальше справиться со случаями, как многие и поступили. В чистом виде жадность не проходила, например, на тесте (1 1 1 2).
Есть и другие подходы, позволяющие избавиться от возни с "маленькими" случаями.
D. Странный город.
Расставим в вершины некоторые числа a_i. Тогда если ребру присвоить цену, равную сумме чисел на его концах, то сумма цен ребер вдоль любого гамильтонова цикла будет равна удвоенной сумме a_i. Осталось придумать такие числа a_i, чтобы их попарные суммы были различны (т.к. цены ребер должны быть различны). Причем такие варианты, как степени двойки или числа Фибоначчи, не годятся из ограничения 1000 на цену ребер. Тогда будем набирать a_i жадно, то есть новое a_i не должно быть равно (a_p + a_q - a_k) для любых уже выбранных чисел a_p, a_q, a_k. Такой выбор чисел в вершинах уже проходит. Причем, как несложно видеть, a_n = O(n^3), т.к. "блокирующих" троек (p, q, k) — O(n^3).
Другая идея заключается в том, что должно выполняться равенство AB+CD=AC+BD для любых различных вершин A,B,C,D (в сумме — стоимости соответствующих ребер), так как гамильтонов цикл с ребрами AB и CD "перестраивается" в цикл с ребрами AC и BD, а суммы у этих циклов должны быть равны.
Из этого, если хотите, можете понять, каким образом жюри точно и быстро проверяло ваши ответы.
В задаче нужно было понять, какое максимальное x, упомянутое в условии, можно взять, чтобы каждого из ингредиентов хватило. Ясно, что это x = min(b_i / a_i). Осталось взять минимум из двух объемов — получившегося объема супа и объема кастрюли.
В. Незаконченная партия.
В этой задаче нужно было проверить ровно то, что сказано в условии: позиция короля и все позиции на доске, в которые он может пойти находятся под ударом, — значит, мат. Таким образом, нужно было правильно определить на доске позиции под ударом. Для этого поставим на доску только белые ладьи и белого короля, клетки, в которые может пойти король, отметим как битые, клетки, на которых стоят ладьи, оставим небитыми (чтобы черный король мог есть ладей), а клетки, до которых могут добраться ладьи, — тоже отметим как битые.
С. Взлом сейфа.
Ответ в этой задаче всегда положительный, то есть четыре единицы получить можно всегда. Действуя жадно (то есть делая операциями соседние числа четными и деля их на два), легко за логарифмическое (и получающееся, конечно, меньше 1000) количество операций добиться того, что сумма чисел будет не больше шести и дальше справиться со случаями, как многие и поступили. В чистом виде жадность не проходила, например, на тесте (1 1 1 2).
Есть и другие подходы, позволяющие избавиться от возни с "маленькими" случаями.
D. Странный город.
Расставим в вершины некоторые числа a_i. Тогда если ребру присвоить цену, равную сумме чисел на его концах, то сумма цен ребер вдоль любого гамильтонова цикла будет равна удвоенной сумме a_i. Осталось придумать такие числа a_i, чтобы их попарные суммы были различны (т.к. цены ребер должны быть различны). Причем такие варианты, как степени двойки или числа Фибоначчи, не годятся из ограничения 1000 на цену ребер. Тогда будем набирать a_i жадно, то есть новое a_i не должно быть равно (a_p + a_q - a_k) для любых уже выбранных чисел a_p, a_q, a_k. Такой выбор чисел в вершинах уже проходит. Причем, как несложно видеть, a_n = O(n^3), т.к. "блокирующих" троек (p, q, k) — O(n^3).
Другая идея заключается в том, что должно выполняться равенство AB+CD=AC+BD для любых различных вершин A,B,C,D (в сумме — стоимости соответствующих ребер), так как гамильтонов цикл с ребрами AB и CD "перестраивается" в цикл с ребрами AC и BD, а суммы у этих циклов должны быть равны.
Из этого, если хотите, можете понять, каким образом жюри точно и быстро проверяло ваши ответы.
2-3-4-5: 3+6+10 = 19 длина пути
2-4-3-5: 5+6+9 = 18 длина пути
Получается, что любой гамильтонов путь содержащий 2-3-4-5 по длине отличается от того же пути содержащего 2-4-3-5, а по условию все гамильтоновы пути имеют одинаковую длину.
Для соблюдения этого условия необходимо расставить веса на вершинах, а вес рёбер брать как сумму весов вершин которое оно соединяет.
1) Найти наибольшое число.
2) Еслу можно поделить его на 2 - поделить.
3) Иначе - увеличить (один или 2 раза) и поделить.
Если наибольшое число больше 4, очевидно работает потому, сумма чисел уменшается после каждое деление. Иначе я не могу доказать, на контесте просто запустил на все малинкие тестов и увидел, что работает.
just to keep at one place..