Блог пользователя hogloid

Автор hogloid, 12 лет назад, перевод, По-русски

Всем привет!

snuke, EnumerativeCombinatorics и я приглашаем всех поучаствовать в Codeforces Round #263. Он состоится во вторник 26-го августа в 18:00 по московскому времени. Обратите внимание на необычное время старта раунда.

Спасибо Gerald за помощь в подготовке раунда, MikeMirzayanov за создание платформы для проведения соревнований, а Delinur за перевод условий.

В задачах нашего раунда вы будете помогать двум персонажам: Яблов (англ. Appleman) и Тостов (англ. Toastman). Удачи и удовольствия от решения задач на раунде!

UPD. В обоих дивизионах (Div.1 и Div.2) распределение баллов по задачам будет стандартным: 500-1000-1500-2000-2500.

  • Проголосовать: нравится
  • +420
  • Проголосовать: не нравится

»
12 лет назад, скрыть # |
 
Проголосовать: нравится +42 Проголосовать: не нравится

Today is Saturday, the 23rd.

Contest is on Sunday, the 26th.

OK.

»
12 лет назад, скрыть # |
 
Проголосовать: нравится +63 Проголосовать: не нравится

A Div1 + Div2 round :)) It 's time for the "newly registered army" to take off their mask ^^

»
12 лет назад, скрыть # |
 
Проголосовать: нравится +40 Проголосовать: не нравится

Www,long time no see div.1

»
12 лет назад, скрыть # |
 
Проголосовать: нравится -14 Проголосовать: не нравится

I think problems will be very hard and logical.

»
12 лет назад, скрыть # |
 
Проголосовать: нравится +61 Проголосовать: не нравится

Finally a round by animals (cat, wolf and squirrel, right?) from Japan!

Oh, god, the start time is 7:00 am in LA, it will be a tough round for me. :)

»
12 лет назад, скрыть # |
 
Проголосовать: нравится +3 Проголосовать: не нравится

Why there's still no upcoming contest now???

»
12 лет назад, скрыть # |
 
Проголосовать: нравится +22 Проголосовать: не нравится

Wow, blog is earlier than upcoming contest list.

»
12 лет назад, скрыть # |
 
Проголосовать: нравится +9 Проголосовать: не нравится

Wow. So early blog post

And I like the contest time which is a bit early than usual :D don't have to stay up to midnight :D

»
12 лет назад, скрыть # |
 
Проголосовать: нравится +20 Проголосовать: не нравится

At least, names of heroes are easy to pronounce this time :D

»
12 лет назад, скрыть # |
 
Проголосовать: нравится +1 Проголосовать: не нравится

OMG ..

In korea the time is 23:00.. and I'll be home at 12:30...

I can't participate this round :<

»
12 лет назад, скрыть # |
 
Проголосовать: нравится +10 Проголосовать: не нравится

at last a DIV1 round after 2 contests :)

»
12 лет назад, скрыть # |
 
Проголосовать: нравится -7 Проголосовать: не нравится

My first div1 round ever.. so.. lets hope for math!

»
12 лет назад, скрыть # |
 
Проголосовать: нравится +5 Проголосовать: не нравится

Appleman looks much better than official Apple logo. :)

»
12 лет назад, скрыть # |
 
Проголосовать: нравится +3 Проголосовать: не нравится

Let's not hope for math, and for dp and graph theory [by the way kudos to SRM 630 writers].

Also, I knew that this will be a lucky contest for me right after I saw the apple. Apples are graphs >:D.

»
12 лет назад, скрыть # |
 
Проголосовать: нравится +4 Проголосовать: не нравится

good time for contest :) hooooray !

»
12 лет назад, скрыть # |
 
Проголосовать: нравится +6 Проголосовать: не нравится

Waiting for a great contest! Hope the problem easy to understand.

»
12 лет назад, скрыть # |
 
Проголосовать: нравится +3 Проголосовать: не нравится

Continuous rating down......

»
12 лет назад, скрыть # |
Rev. 2  
Проголосовать: нравится 0 Проголосовать: не нравится

If we fail pretests 2 times is the penalty = -(50*2) or (-50) ? Same question for failed hacks .

»
12 лет назад, скрыть # |
Rev. 2  
Проголосовать: нравится -6 Проголосовать: не нравится

IGNORED

»
12 лет назад, скрыть # |
 
Проголосовать: нравится +16 Проголосовать: не нравится

Wow, long time no see Div1!Come on, let's enjoy it~ ^+^

»
12 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится

The contest is a little early in the day than usual. Its coinciding with my mess timings for dinner! :(

»
12 лет назад, скрыть # |
 
Проголосовать: нравится +6 Проголосовать: не нравится

give yuo a plus please — http://mirror.codeforces.com/blog/entry/13439 !!!

P. S. not minus me !!!

»
12 лет назад, скрыть # |
 
Проголосовать: нравится +10 Проголосовать: не нравится

Oh , I missed to be Candidate master with (4) rating last contest. I hope to raise to Div1 tomorrow :)

»
12 лет назад, скрыть # |
 
Проголосовать: нравится +2 Проголосовать: не нравится

"May the Odds be in your favor!" :D

»
12 лет назад, скрыть # |
 
Проголосовать: нравится -24 Проголосовать: не нравится

Hope for good problem, long time no see div.1. Good luck and have fun for everyone.

»
12 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится

long time no taking div2:) Ok, let me do it tonight!

»
12 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится

2 часа до раунда, а перевода на русский всё нет... косяк. Надеюсь, хоть задачи не забыли перевести.

»
12 лет назад, скрыть # |
 
Проголосовать: нравится +29 Проголосовать: не нравится

"В задачах нашего раунда вы будете помогать двум персонажам: Яблов"

Наверное, зря я ругался, что нет русского перевода...

»
12 лет назад, скрыть # |
 
Проголосовать: нравится +7 Проголосовать: не нравится

What do you guys do before contest?

»
12 лет назад, скрыть # |
 
Проголосовать: нравится +3 Проголосовать: не нравится

I have a question: Can I participate in div 2 contest? or just Div 1?

»
12 лет назад, скрыть # |
Rev. 2  
Проголосовать: нравится +2 Проголосовать: не нравится

Яблов? Эт что, гугл переводил?

»
12 лет назад, скрыть # |
 
Проголосовать: нравится -14 Проголосовать: не нравится

Wow! Amount of div1 participants is very close to amount of div2 participants. :D Amazing)

»
12 лет назад, скрыть # |
 
Проголосовать: нравится +11 Проголосовать: не нравится

Toastman is him.

He appears in this problem.

»
12 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится

Чем японский раунд отличается от китайского?

»
12 лет назад, скрыть # |
 
Проголосовать: нравится -28 Проголосовать: не нравится

hello ~ why my B problem hack failed...

my generate program is

print 100000,100000
a = []
for i in xrange(100000):
    a.append('A')
print "".join(a)

thx~

»
12 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится

The worst feeling in the world — when you lock your solution to problem B for in D2 and realize minutes after that you are not going to pass the system test cases...

At least I got some points back by hacking people in the rooms. How lucky some people are! With 15 hacks on the same problem, while I only got 7...

»
12 лет назад, скрыть # |
Rev. 2  
Проголосовать: нравится 0 Проголосовать: не нравится

I made some stupid mistake at A and B, and it results in -100p for A and -50p for B =='

Problem D & E are hard for div2 ==' btw problem B is a nice problem for hacking...

»
12 лет назад, скрыть # |
 
Проголосовать: нравится -9 Проголосовать: не нравится

Awful problem statements (were they in english !?) .

It doesn't matter how good your problems are if they are not readable .

  • »
    »
    12 лет назад, скрыть # ^ |
     
    Проголосовать: нравится +2 Проголосовать: не нравится

    it is pretty obvious when three geek red coders prepare some round. they don't speak english/japaneese/chineese or russian. they only speak c++ :p

    • »
      »
      »
      12 лет назад, скрыть # ^ |
       
      Проголосовать: нравится +7 Проголосовать: не нравится

      English is pretty much of a prerequisite for coding, as most of textbooks available are in English language and not in Russian! And since they are geeks, which more or less means that they have read A LOT and know A LOT, they should now English to a sufficient level (maybe ECPE is too much, but ...)!

      • »
        »
        »
        »
        12 лет назад, скрыть # ^ |
         
        Проголосовать: нравится 0 Проголосовать: не нравится

        its not about knowing English sir, its about using right word at right place. its about explaining something, making something understandable to me. Except B all the problems were well written , i think. though it would be fine if the explanation of problem E would express test case one completely instead of just updates. but I think it was fair enough...

        My suggestion would be to evolve at least one purple coder to test div2 problems.

  • »
    »
    12 лет назад, скрыть # ^ |
     
    Проголосовать: нравится 0 Проголосовать: не нравится

    totally agree.I submitted so late problems A and B because they were not clear. Wasted much time in understanding the problem statement.

»
12 лет назад, скрыть # |
 
Проголосовать: нравится +39 Проголосовать: не нравится

Доминируй, властвуй, унижай!

»
12 лет назад, скрыть # |
 
Проголосовать: нравится +8 Проголосовать: не нравится

:'( nah, hard problems, but I still love it :)), I love the way I can't solve this :'(

»
12 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится

Мир жесток(
По Div2C — Div1A задаче встретил чувака, который писал такое:

ll solve(int x, int y)
{
if(x == y)
return ans;
// ....
return solve(x + 1, y);
}
// Запуск в main() через solve(1,n)

У меня переполнение стека в Visual Studio вышло в n = 100 000, при ограничениях n <= 300 000. В "запуске" codeforces переполнение удалось получить только на n = 30 000 000

=(

»
12 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится

Hacking is really fun :D

»
12 лет назад, скрыть # |
 
Проголосовать: нравится +13 Проголосовать: не нравится

Wow!

»
12 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится

No simple for problem D,E Div2

»
12 лет назад, скрыть # |
 
Проголосовать: нравится +4 Проголосовать: не нравится

Contest's ended. How to solve 462D - Appleman and Tree?

»
12 лет назад, скрыть # |
 
Проголосовать: нравится +3 Проголосовать: не нравится

I've never seen so many hacks..that's amazing.

»
12 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится

A lot of participants in room 58 were inactive, would have been even more interesting had more people taken the contest :P

»
12 лет назад, скрыть # |
 
Проголосовать: нравится +1 Проголосовать: не нравится

Nice problems... :)
And nice round for Hack Lovers... :D

»
12 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится

The hack swarm had to happen :-P

»
12 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится

No hacks this round. :)) Liked it though. I'm curious about A's proof, liked B and nearly finished C. Keep it up.

»
12 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится

Div1 C, случайно, не декартовым деревом решается?

  • »
    »
    12 лет назад, скрыть # ^ |
     
    Проголосовать: нравится 0 Проголосовать: не нравится

    Я так извратился, например. Но можно намного проще: мы в каждый момент заворачиваем не левый конец, а тот, который короче. Тогда никаких реверсов не требуется, можно заворачивать "в лоб", только надо чуть аккуратнее разбираться со вводом.

  • »
    »
    12 лет назад, скрыть # ^ |
     
    Проголосовать: нравится +2 Проголосовать: не нравится

    C вообще по-моему получилась легче чем В. Для В надо извратное дп писать, а в С простое дерево отрезков

»
12 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится

hack with OVERFLOW :)

»
12 лет назад, скрыть # |
Rev. 3  
Проголосовать: нравится +3 Проголосовать: не нравится

C(div1) is a joke :D. Didn't have enough time to code it unfortunately. Great contest anyway.

»
12 лет назад, скрыть # |
 
Проголосовать: нравится +19 Проголосовать: не нравится

Размышления по Е:

Оптимальная стратегия для Яблова такова: строка s построена оптимально тогда, когда использован максимальный суффикс, являющийся подстрокой t и её префикс без учёта этого суффикса также построен оптимально.

Отсюда вытекает такая контр-стратегия для Тостова — загадать строку так, чтобы на каждом её префиксе такой суффикс был минимальной длины. Как мне показалось, это можно сделать так — в суффиксном автомате посчитаем для каждого состояния дополнительные переходы next[i]. То есть, такие, что при переходе в них мы получим минимальную длину совпадения суффикса. Если у нас можно так перейти только по одной букве — то всё понятно. А если по нескольким, то нужно перейти по той, которая потом первой даст суффикс минимальной длины. Утверждается, что наша строка быстро станет периодичной с периодом в худшем случае не больше O(n), хотя и, наверное, с каким-то предпериодом и потом можно для неё посчитать ответ, как для периодичной.

Что вы думаете по этому поводу? Есть где-то логические несостыковки? Если нет, то как можно посчитать переходы быстро и правильно? Я за время контеста так и не справился с этой задачей :(

  • »
    »
    12 лет назад, скрыть # ^ |
    Rev. 2  
    Проголосовать: нравится +8 Проголосовать: не нравится

    Я в конце пытался так. Во-первых, сделаем такой граф из суфф автомата:

    1. Четыре вершины (по одной для каждой буквы).
    2. Направленное ребро из каждой вершины в каждую. Вес ребра равен из A в B ставим равным минимальному количеству букв, которые надо пройти в суфф автомате, чтобы из суффикса А прийти к суффиксу B.
    3. Дополнительная вершина-исток.
    4. По одному ребру из истока в каждую вершину-букву. Вес данных ребер = 1.

    Тогда в этом графе нам надо найти самый длинный путь из истока весом не более N. Это вроде можно сделать двоичным подъемом, не задумываясь о периодах.

    UPD: А вот и АС в дорешку, не хватило буквально пяти минут на контесте: 7596132

    • »
      »
      »
      12 лет назад, скрыть # ^ |
       
      Проголосовать: нравится 0 Проголосовать: не нравится

      Можно подробнее о том, что представляют собой переходы между буквами и почему это работает? А то из описания выходит, что *-А-В-С не менее хороший путь, чем *-А-С

      • »
        »
        »
        »
        12 лет назад, скрыть # ^ |
         
        Проголосовать: нравится +5 Проголосовать: не нравится
        1. Строю суффиксный автомат (http://e-maxx.ru/algo/suffix_automata). Для строки "ABCCAD" из условия получаю что-то типа этого (стрелки не нарисованы, но они типа идут сверху вниз):

        Серым обозначены "важные" узлы, это те которые непосредственно доступны из корня при переходе по одной из четырех букв.

        1. Размышляю так: если воспроизвести то, что делает игрок с получившейся строкой, то получится, что он будет ходить по этому автомату, периодически возвращаясь назад. Причем возвращаться он всегда будет в один из "важных" серых узлов, потому что он будет начинать искать новый суффикс. Ребра для возврата назад на рисунке не обозначены, но по смыслу они там должны быть везде, где нет настоящего перехода (т.е. эти переходы назад по сути заменяют суффиксные ссылки в автомате). Нам надо, чтобы игрок как можно больше раз вернулся назад, соответственно при фиксированном начальном и конечным сером узле нам желательно, чтобы этот путь был как можно короче. Минимальный путь у меня считается в функции calc(), нужные значения легко считаются по автомату.

        2. Строим граф — оставляем только "важные" узлы и добавляем ребра с весом равным "расстоянию" в автомате. Веса этих ребер можно вывести в моем коде, если раскоменнтировать строчку в самом конце (строка 183, примерно 15-я снизу). Для этого примера получим что-то такое:

          Например, переход А->В имеет вес 2, это означает, что если текущий рассмотриваемый суффикс состоит из одной буквы "А", то чтобы "сброситься" в суффиксном автомате до суффикса, равного "В", нужно использовать как минимум две буквы (после А). Для перехода А->В это будут буквы "BB". Если пройтись из серого узла А в автомате по этим двум буквам, то как раз после второго перехода "сброситесь" в В.

        3. Дальше, как я уже, писал добавляем исток и ребра с единичными весами из него все имеющиеся вершины.

        4. Ищем максимальный (по количеству ребер) путь с суммарным весом не более N из истока в любую вершину. Это и будет ответ.

»
12 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится

Почему A div1 такая простая? Почему у человека решающего A div2 в среднем за 5 минут ушло 5 минут на A div1?

  • »
    »
    12 лет назад, скрыть # ^ |
    Rev. 3  
    Проголосовать: нравится 0 Проголосовать: не нравится

    Взломы, просто взломы...)

    UPD: извиняюсь, перепутал с div 2 B.

  • »
    »
    12 лет назад, скрыть # ^ |
     
    Проголосовать: нравится 0 Проголосовать: не нравится

    прост))

  • »
    »
    12 лет назад, скрыть # ^ |
     
    Проголосовать: нравится 0 Проголосовать: не нравится

    В зависимости от очевидности/шаблонности задачи
    Сортировка массива и ответ a * mass[0] + (a+1) * mass[1] — слишком очевидно, чтобы думать над задачей полчаса
    А то бывает и сложность как у D, и решальщиков столько же

    • »
      »
      »
      12 лет назад, скрыть # ^ |
      Rev. 4  
      Проголосовать: нравится 0 Проголосовать: не нравится

      В том то и дело, сложность задачи зависит от входных данных, ограничений, условия (вот я в MemSql B полчаса перечитывал, чтобы понять, что он меня хотят вообще), времени реализации, а самое главное — сложности идеи, которая должна прийти в голову.

      Если бы эту задачу поменяли бы местами с А div2 — уверен, это ничего бы не изменило (разве что было бы тоже очень много взломов из-за переполнения), а еще лучше, если бы с B div2, которая вроде бы простая, но опять же, из-за переполнения было много, даже очень много, взломов.

      Вон мы командой решали B div1, так она была элементарной, максимум тянула на A div1, но вообще B div2 по уровню. Но в ней было несколько частных случаев (а в этой задаче их нет), которые, плюс ко всему, намеренно не проверялись претестами. Задача была создана для взломов.

      В общем, про(Яблов)ли сложность задач в этом контесте.

      • »
        »
        »
        »
        12 лет назад, скрыть # ^ |
         
        Проголосовать: нравится 0 Проголосовать: не нравится

        Если бы эту задачу поменяли бы местами с А div2 — уверен, это ничего бы не изменило (разве что было бы тоже очень много взломов из-за переполнения)

        http://mirror.codeforces.com/contest/461/hacks Взломов по Div1 А капля, и все относятся к неправильным частным случаям. Ответ везде был представлен как по шаблону — типом long long. Был, правда, человек, который ответ находил рекурсией в n вызовов, только у меня на компьютере 100 000 (при n <= 300 000) вызовов уже делали Stack Overflow, а в "Запуске" хватало только 30 000 000 вызовов :)

        Вон мы командой решали B div1, так она была элементарной, максимум тянула на A div1, но вообще B div2 по уровню

        Три года назад задачи легче были, и в первом дивизионе были все, кому не лень — http://mirror.codeforces.com/blog/entry/3064 Надо решать как можно ближе к сегодняшнему состоянию задачи

        • »
          »
          »
          »
          »
          12 лет назад, скрыть # ^ |
           
          Проголосовать: нравится +3 Проголосовать: не нравится

          В B div2 все взломы ведь были основаны на переполнении? Я так думаю, что во втором дивизионе участники меньше обращают внимания на такие вещи, так что будь эта задача для них — то и упавших решений было бы больше. Зачастую участники, зная что вряд ли решат С, даже не читают её.

        • »
          »
          »
          »
          »
          12 лет назад, скрыть # ^ |
          Rev. 2  
          Проголосовать: нравится 0 Проголосовать: не нравится

          delete

»
12 лет назад, скрыть # |
 
Проголосовать: нравится +2 Проголосовать: не нравится

I was at the blessing room. 19 successful hacks :D

»
12 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится
var K : LongInt; //Строчка ценой 500 очков 
»
12 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится

Please make the difficulty distribution of questions more uniform. for example 1-3 were submitted by about 1500 coders and count dropped to about 100 in 4th question.

BTW enjoyed the contest. Waiting for editorial

»
12 лет назад, скрыть # |
Rev. 2  
Проголосовать: нравится 0 Проголосовать: не нравится

Is this the correct solution for Div 2 C? http://ideone.com/AhciAN

Edit: It's not.

»
12 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится

In Div,1 contest, half of submissions are for problem A. It seems that no one fail system tests on A. I think it's a quite simple problem, therefore, the number of participants today is much more than other contests.

»
12 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится

982 official users in div 1
Awesome!!

»
12 лет назад, скрыть # |
 
Проголосовать: нравится +3 Проголосовать: не нравится

I don't think i've ever loved integer overflow so much :D

»
12 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится

Am I right saying that in Div1D 4x4 corner determines all other cells, because rows and columns have to be periodical with period 4?

  • »
    »
    12 лет назад, скрыть # ^ |
     
    Проголосовать: нравится +16 Проголосовать: не нравится

    No, it's not true.

  • »
    »
    12 лет назад, скрыть # ^ |
     
    Проголосовать: нравится +8 Проголосовать: не нравится

    Very simple example:

    ....o...
    ...o.o..
    ..o.o.o.
    .o.o.o.o
    o.o.o.o.
    .o.o.o..
    ..o.o...
    ...o....
    

    What you can do is fix the first row and then there is exactly one way to fill the rest (it's obvious that there is not more than one, and you just believe that it's always possible after looking at small cases with brute force)

  • »
    »
    12 лет назад, скрыть # ^ |
    Rev. 2  
    Проголосовать: нравится 0 Проголосовать: не нравится

    In fact, the first row determines all other cells. Moreover (I didn't prove that, but the brute-force showed that), it seems that each combination of white and black cells in the first row generates a correct board.

    // Oops, too late answer :D

    • »
      »
      »
      12 лет назад, скрыть # ^ |
       
      Проголосовать: нравится 0 Проголосовать: не нравится

      What do you mean by "each combination"? It has to be consistent with already filled cells.

      • »
        »
        »
        »
        12 лет назад, скрыть # ^ |
         
        Проголосовать: нравится 0 Проголосовать: не нравится

        So you can guess that he means "for an empty board".

      • »
        »
        »
        »
        12 лет назад, скрыть # ^ |
         
        Проголосовать: нравится +8 Проголосовать: не нравится

        Okay, I forgot to add that if there are no cells which are already set, then we can color the first row in any way we want and generate exactly one correct solution from it (as yeputons said).

        This observation (as long as the very similar one: if we set 'O'=1, 'X'=0, then the value (mod 2) of each cell can be computed very easily from the values of the first row). Look at the example:

        a0          a1          a2          a3          a4          a5          a6
        a1          a0+a2       a1+a3       a2+a4       a3+a5       a4+a6       a5
        a2          a1+a3       a0+a2+a4    a1+a3+a5    a2+a4+a6    a3+a5       a4
        a3          a2+a4       a1+a3+a5    a0+a2+a4+a6 a1+a3+a5    a2+a4       a3
        a4          a3+a5       a2+a4+a6    a1+a3+a5    a0+a2+a4    a1+a3       a2
        a5          a4+a6       a3+a5       a2+a4       a1+a3       a0+a2       a1
        a6          a5          a4          a3          a2          a1          a0
        

        (the addition is mod 2, i.e. the same as xor). If we count the prefix sums of the same parity (that is: 0, a0, a0+a2, a0+a2+a4, a0+a2+a4+a6, ... and 0, a1, a1+a3, a1+a3+a5, ...), we are able to write all the constraints in the form [one prefix sum] xor [another prefix sum] = (c=='o'). Number of such solution (and existence of them) can be computed/checked easily. Somehow I got WA, so maybe I'm not that right... :D

    • »
      »
      »
      12 лет назад, скрыть # ^ |
       
      Проголосовать: нравится +8 Проголосовать: не нравится

      Yes. We take x = 0 and o = 1. If we put ui = A[1][i], then we can write explicit formulas for A[i][j] int terms of ui. Each formula is like u2s + u2s + 2 + ... + u2t or u2s + 1 + ... + u2t + 1. So we have system of equations in F2n. We can find the number K of independet equations using Find-Union, Polish guys knows that trick from KUGLARZ (potyczki 2014).
      The answer is 2K or 0...

»
12 лет назад, скрыть # |
 
Проголосовать: нравится +13 Проголосовать: не нравится

Div1 — A was easy than usual and and Div1 — B was hard than usual.

»
12 лет назад, скрыть # |
 
Проголосовать: нравится -8 Проголосовать: не нравится

Congratulations : — Div 1 : YuukaKazami — Div 2 : yyt16384

»
12 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится

Compare Div 2 A with Div 1 D and Div 2 B with Div 1 E

»
12 лет назад, скрыть # |
Rev. 2  
Проголосовать: нравится 0 Проголосовать: не нравится

IGNORED

»
12 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится

I still see unrated genius users in Top 10 Div2...

»
12 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится

I misunderstood problem C's description... This point specifically: Each time Appleman gets a group consisting of a single number, he throws this group out.

What I understood was that if the group consisted of equal numbers, then he throws that group but it turns out this meant that a group is thrown away if group consists of a single number(Just as the sentence said...). Never thought of it that way until one of my friends explained.

Just wanted to mention it so that if someone did the same, he wouldn't be puzzled too much.

»
12 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится

how could so many people hack problem B(div.2) solutions? mine is also hacked as well, but i can't find my mistake. can anybody please tell me why this could happen? thanks :)

»
12 лет назад, скрыть # |
Rev. 2  
Проголосовать: нравится 0 Проголосовать: не нравится

How long does it usually take, after the contest, to recalculate the rating of each participant? This is my first time competing on Codeforces. I was on a train for the first half of the competition, and didn't realize that the points for each problem decrease over time :\

»
12 лет назад, скрыть # |
 
Проголосовать: нравится +5 Проголосовать: не нравится

I was just about to use Splay in problem C when I found interval flip operations are not really needed. ...

Anyway, the problems are nice.

»
12 лет назад, скрыть # |
Rev. 2  
Проголосовать: нравится 0 Проголосовать: не нравится

yeputons, can you please explain how you solved 462D - Appleman and Tree?

  • »
    »
    12 лет назад, скрыть # ^ |
     
    Проголосовать: нравится +37 Проголосовать: не нравится

    Codeforces do not send any kind of notification for mentions in comments at all.

    Algorithm: we have system of linear equations modulo 2 (each variable is one cell of the field), there are n2 equations from the statement, and k equations from the input.

    Improvements and some ideas:

    1. If we fix the first row, we can deduce the rest. There fore, only n variables and only n equations from the statement (for the last row).
    2. In turns out that if we fix the first row, there will be no problems with the last one. I checked this for small n and believed.
    3. Now we have n variables and k conditions. Each conditions can have up to variables — it's still too much to just store it.
    4. Next notice: each cell is XOR of some continuous segment of cells with fixed parity from the first row. More details are available here.
    5. Now we can easily calculate all the k equations in form 'xor of variables from L to R is V'.
    6. If we run Gaussian elimination now, it's still very slow. However, if we sort equations by (L,R) lexicographically, it's easy to see that on each step of elimination all equations are still in the form 'xor of variables from L to R...', which is cool, because we don't have any problems with memory
    7. Next thing is to make elimination without actually editing each of the segments. I use the 'merge smaller to the larger and it'll be NlogN' trick here.
    • »
      »
      »
      12 лет назад, скрыть # ^ |
       
      Проголосовать: нравится +25 Проголосовать: не нравится

      You have answered Div1D, however dude above had asked you about Div2D which is Div1B :)

    • »
      »
      »
      12 лет назад, скрыть # ^ |
       
      Проголосовать: нравится 0 Проголосовать: не нравится

      I am sorry, but I do not really get yours "I use the 'merge smaller to the larger and it'll be NlogN' trick here." Could you kindly clarify it? p.s. I spent come time looking into your code, but for me it looks like O(N2) :(

      • »
        »
        »
        »
        12 лет назад, скрыть # ^ |
         
        Проголосовать: нравится +3 Проголосовать: не нравится

        I think the thing that confuses you in my submission (7594572) is MagicSet. This structure is a set of some items with one addition: I can append one set to another. Obviously, I can add set A to set B in by just inserting all elements of A to B. Here is the magic:

        if (sz(this->data) > sz(b.data)) this->swap(b);
        

        If I do the job in instead of just and I move elements instead of copying (i.e. each element can be in one set only at every moment — like in Disjoint Set Union), the whole thing works in (amortized). Analysis is very simple and similar to what is used for DSU: let's take a look at each element. When it's moved from one set to another, the 'holder' set's size is increased twice at the least. There cannot be more than of such operations for each element, therefore we have operations with sets and the whole thing takes time. I'd also like to notice that one of these logs is from amortized analysis and has very little impact on constant factor, i.e. this is rather fast.

        • »
          »
          »
          »
          »
          12 лет назад, скрыть # ^ |
           
          Проголосовать: нравится 0 Проголосовать: не нравится

          Thanks for clarification! I like your solution even more because it is clear you invented it by your own.

          btw, your trick works thanks to C++0x and its moving semantic, right? I mean this line: if (sz(this->data) > sz(b.data)) this->swap(b);

          • »
            »
            »
            »
            »
            »
            12 лет назад, скрыть # ^ |
             
            Проголосовать: нравится +3 Проголосовать: не нравится

            it is clear you invented it by your own.

            Well, it's pretty well-known trick. In the several past years I met it dozen times, starting with summer school training camp 2011 and IOI-2011 (problem 'race') which followed it. I've also met this on some Codeforces rounds for sure, on Petrozavodsk training camp...

            btw, your trick works thanks to C++0x and its moving semantic, right?

            No, move semantics is not used here. You know the swap function from STL (like swap(a, b)), and almost every STL structure has member function with the same name: a.swap(b), which does the same in constant time (for example, to swap two vectors you just need to swap two pairs of pointers, no need to copy the content). It was in C++03 for sure. Moreover, std::swap is overloaded for some STL structures to work without copying everything too. I personally prefer using a.swap(b) in places where I definitely need constant time complexity, because I don't remember exactly whether or not std::swap is overloaded.

            If you look in my code, you can see that I implemented this swap member function myself (using set<>::swap inside)

            • »
              »
              »
              »
              »
              »
              »
              12 лет назад, скрыть # ^ |
               
              Проголосовать: нравится 0 Проголосовать: не нравится

              Well, it's pretty well-known trick. In the several past years I met it dozen times, starting with summer school training camp 2011 and IOI-2011 (problem 'race') which followed it. I've also met this on some Codeforces rounds for sure, on Petrozavodsk training camp...

              Could you kindly tell me a couple problems to solve? I think to really understand problem one has to solve a couple of similar ones.

  • »
    »
    12 лет назад, скрыть # ^ |
     
    Проголосовать: нравится +7 Проголосовать: не нравится

    Wrong problem, I'm sorry.

    Well, it's very straightforward for me: if you have tree (especially rooted one) and have to select some subset of vertices/edges and minimize/maximize some function of the resulting partition, you're gonna have a tree DP.

    Usually tree DP in partition problems looks like this: you've already partioned some sub-tree and are currently constructing a component to which a root of the subtree belongs. In this particular problem the only required property of a component is whether or not it contains one black vertex. It's the state of DP. Transition is another simple DP (please don't be scared by that): you start with one obvious way (depending on subtree's root's color) and then add children one-by-one. There are several possible ways of merging a child: it either has or not black vertex already, and you and also just cut an edge leading to the child.

    You can look at my code (7583221) for details — dfs() is doing the DP. I don't store results of DP anywhere — it's just passed as return value of dfs().

    • »
      »
      »
      12 лет назад, скрыть # ^ |
       
      Проголосовать: нравится 0 Проголосовать: не нравится

      can you please explain how we can calculate the merging of childs , I mean if color of x is one , then we must cut all the edges to children right?cause If we add the edge then there will be an component with two black vertices. But , what are the calculations if x is white?

    • »
      »
      »
      12 лет назад, скрыть # ^ |
       
      Проголосовать: нравится 0 Проголосовать: не нравится

      Learned a lot from your comment, thank you ! It would be great if you can provide some related problems which uses this method. (links to OJ problems would be appreciated)

»
12 лет назад, скрыть # |
Rev. 2  
Проголосовать: нравится 0 Проголосовать: не нравится

IGNORED

»
12 лет назад, скрыть # |
 
Проголосовать: нравится +141 Проголосовать: не нравится

Nice problem! D&E is really interesting to solve :).

I am so lucky to get E right at 1:58:) ...

Also It is my 7-th CF win!(For my darling sevenkplus :) )... Many years passed since I join CF, and the pleasure I get from it never decreased :).

»
12 лет назад, скрыть # |
 
Проголосовать: нравится +8 Проголосовать: не нравится

how to know what was the test case used by another person to hack my solution in the contest?

»
12 лет назад, скрыть # |
 
Проголосовать: нравится -10 Проголосовать: не нравится
»
12 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится

When will div 2 rating be updated ? Div 1 rating is already updated.

»
12 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится

aah today I forgot to hack :)

»
12 лет назад, скрыть # |
 
Проголосовать: нравится +26 Проголосовать: не нравится

Finally DIV1 ,Now I can RIP :D

»
12 лет назад, скрыть # |
Rev. 2  
Проголосовать: нравится +1 Проголосовать: не нравится

Please can anyone give the proof for why the solution for div1 A / div2 C works ?

  • »
    »
    12 лет назад, скрыть # ^ |
    Rev. 3  
    Проголосовать: нравится +5 Проголосовать: не нравится

    You can prove by induction.

    Let's consider that for all arrays with sizes n' < n it is true that the next algorithm Alg is optimal:

    1) Sort an array.

    2) Divide an array from left to right, taking at each step first element.

    Suppose we have an array a and it's size n. res = Alg(a). Let's sort it and divide by any index q. By induction we know that it's optimal to use Alg for these subarrays. But it's easy to see that the result sum  ≤ res.

»
12 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится

Why did I get WA even when I used long long for sum?? http://mirror.codeforces.com/contest/462/submission/7590781

»
12 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится

How is Div2 E supposed to be solved?

»
12 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится

What is the purpose of custom invocation ?

How can we lock our solution ? What is its advantage?

  • »
    »
    12 лет назад, скрыть # ^ |
     
    Проголосовать: нравится 0 Проголосовать: не нравится

    Custom invocation: in case you're too lazy to actually get a compiler/interpreter of your language of choice and want to test out codes with Codeforces platform.

    Locking solution: You can now hack other solutions for possible points if you're correct.

»
12 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится

This is my submission for : Div 2 C

It passed tests for similar sized inputs but failed on the 24th test case. I've used Python 2.7 to submit that. Isn't it unfair that I have been penalized just for using Python? My algorithm uses a priority queue and is O(nlogn)

»
12 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится

:-) Hello

»
12 лет назад, скрыть # |
 
Проголосовать: нравится +6 Проголосовать: не нравится

Some stats about hacks can be found here.

»
12 лет назад, скрыть # |
 
Проголосовать: нравится +21 Проголосовать: не нравится

Офигеть имена — Яблов и Тостов. Почему нельзя было литературно перевести Яблочков и Тостиков?

»
12 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится

why my summission is skipped? Your text to link here...