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

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

Всем привет!

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

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

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

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

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

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

Today is Saturday, the 23rd.

Contest is on Sunday, the 26th.

OK.

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

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

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

Www,long time no see div.1

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

I think problems will be very hard and logical.

  • »
    »
    10 лет назад, # ^ |
      Проголосовать: нравится -10 Проголосовать: не нравится

    Thanks for your opinion, it means so much to me!

    • »
      »
      »
      10 лет назад, # ^ |
        Проголосовать: нравится -11 Проголосовать: не нравится

      i hate to see this comment getting too much down votes!

      • »
        »
        »
        »
        10 лет назад, # ^ |
          Проголосовать: нравится -19 Проголосовать: не нравится

        Okay, let me translate how I understood it: "STFU NOBODY CARES ABOUT THAT!". Would you not downvote it?

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

          what a coincidence!! i understood it as "STFU NOBODY CARES ABOUT THAT!" too! we have a lot of common man! you might up-voted it as i did it so.

»
10 лет назад, # |
  Проголосовать: нравится +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. :)

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

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

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

Wow, blog is earlier than upcoming contest list.

»
10 лет назад, # |
  Проголосовать: нравится +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

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

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

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

OMG ..

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

I can't participate this round :<

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

at last a DIV1 round after 2 contests :)

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

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

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

Appleman looks much better than official Apple logo. :)

»
10 лет назад, # |
  Проголосовать: нравится +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.

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

    Let's also hope for clear problem statements! Sometimes I become confused reading them for the first time!

    +long editorial :)

    Good Luck.

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

good time for contest :) hooooray !

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

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

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

Continuous rating down......

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

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

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

    -50 for every failed pretest (not counting failed on pretest 1), but only if you eventually solve the problem. -50 for every failed hack. So that means two failed pretests are -100 and so as two failed hacks.

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

      How much penalty for failing pretest 1 two times ?

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

        Failing pretest 1 doesn't give any penalty (because the reason might be selecting the wrong file, among other things, that is just a minor error). So failing pretest 1 twice doesn't take any points either.

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

          "selecting the wrong file". Happens with me most of the time.:/

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

IGNORED

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

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

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

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

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

    as a BITSian who has participated in contests at such time, let me tell u this.

    we both know that the mess food sucks. so

    • go to mess around 7, take some extras, and come back to your room.
    • do the contest, while eating/drinking the above stuff.
    • then go to ANC (very close to ur SK bhawan, AFAIK) and eat to ur heart's content. :D
    • hopefully system testing will be over by the time u return.
»
10 лет назад, # |
  Проголосовать: нравится +6 Проголосовать: не нравится

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

P. S. not minus me !!!

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

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

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

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

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

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

  • »
    »
    10 лет назад, # ^ |
    Rev. 3   Проголосовать: нравится +89 Проголосовать: не нравится
    • »
      »
      »
      10 лет назад, # ^ |
      Rev. 2   Проголосовать: нравится 0 Проголосовать: не нравится

      we should register only one account. :)

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

      kuangbin11 and kuangbin12 also!
      probably they will become Candidate Master in the next two Div-2 only contests.

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

      I've seen those accounts being posted around a few times already and it's clearly against the rules to make more than one account and compete, so can someone tell me why the hell isn't he banned?

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

        we can't agree more !

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

          Well it just quite angers me. I see blogs and comments non-stop complaining "there are so many fakes in Div2, why would they do this" and then when you see someone with 10 accounts, all of them with participations only until they reach Div1, which is obviously cheating, no one really cares. I thought people wanted to reduce fakes? I mean, as JuanMata showed, he has 2 more waiting for a Div2 round, doesn't seem like he will stop doing it.

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

            ofcourse we want to reduce fakes!

            but i don't agree with no one really cares — i mean, surely one of the reasons why muratt posted these two comments was so that admins could see them and ban those accounts.

            as to why these accounts don't get banned — probably the admins want to prove without doubt that they are fakes before taking any action, lest they ban an innocent newly registered user (who will have no idea wtf just happened, and start disliking CF for wrong reasons)!

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

              I get that you post this so the admins can see it, but my point was that this is not the first time someone posts names of obvious cheaters. Thing that frustrates me is that sometimes I see posts from months ago where someone reported a cheater, and when I check the cheater's account, it is perfectly unharmed!

              Now I get the "prove without doubt" part, and I don't try to sound arrogant in some way since I'm not familiar with the things admins can do, but couldn't they simply check the IPs of the users? Surely that would still leave room for cheating as you can hide it or change it, but most of them will most likely use the same IP. Obviously if your cheating accounts have just another digit added to the end of their name, I doubt you'd go as far as hiding your IP.

              I guess you could argue further that same IP is still not reliable (a brother, a friend from your computer) but in some cases such as the above one it's just kinda obvious that cheating is going on.

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

      Stierlitz still was never so close to a failure...

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

      It is outraging to see this in Div. 1. Previously I thought such detestable things only occurred in Div. 2.

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

      kuangbin have really ability.He always have good rank in my contry's match!this is a evidence(recent match):http://www.bnuoj.com/v3/contest_show.php?cid=4340#standing maybe you misunderstand him! I have studied much knowledge from his blog. so I am very like him!

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

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

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

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

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

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

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

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

    Главному герою тоже не нравится его фамилия, судя по картинке

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

What do you guys do before contest?

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

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

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

    If your rating is >=1700 you can not participate in Div2 contests when a div1 contest is scheduled at the same time.

    However if there is a solo div2 contest and the organizers allow , then you can participate in it, but that would be unrated for you.

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

    If you can do all problems in both, why not.

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

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

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

    Неа, гугл догадался не переводить имена собственные.

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

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

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

    1329 registrants for Div1 and 3988 for Div2.
    Yes you are right, very close :|

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

    How sir?

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

    When I wrote that comment, they were very close. Why --------?? You can't understand it without my hint? (Sorry for bad English :D)

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

      Nope. You wrote that comment 15 minutes before the contest started. Are you implying 2500 users registered in 10 minutes? Because I won't believe that.

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

Toastman is him.

He appears in this problem.

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

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

»
10 лет назад, # |
  Проголосовать: нравится -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~

»
10 лет назад, # |
  Проголосовать: нравится 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...

»
10 лет назад, # |
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...

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

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

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

  • »
    »
    10 лет назад, # ^ |
      Проголосовать: нравится +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

    • »
      »
      »
      10 лет назад, # ^ |
        Проголосовать: нравится +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 ...)!

      • »
        »
        »
        »
        10 лет назад, # ^ |
          Проголосовать: нравится 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.

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

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

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

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

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

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

»
10 лет назад, # |
  Проголосовать: нравится 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

=(

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

Hacking is really fun :D

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

Wow!

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

No simple for problem D,E Div2

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

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

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

    DP on states "there's 1 black vertex in subtreee of v left" and "there's 0 black vertices in subtree of v left"

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

    Dynamic on tree, save two value — how many ways to get black from component with root in current vertex and how many to get white from it. Then answer will d[0].black.

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

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

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

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

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

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

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

The hack swarm had to happen :-P

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

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

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

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

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

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

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

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

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

hack with OVERFLOW :)

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    прост))

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

          delete

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

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

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

    Какое там, в теории один символ может стоить 2500 очков и часа потерянного времени

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

      3000 (не забываем про гиперсложные задачи и динамическую разбалловку).

»
10 лет назад, # |
  Проголосовать: нравится 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

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

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

Edit: It's not.

»
10 лет назад, # |
  Проголосовать: нравится 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.

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

982 official users in div 1
Awesome!!

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

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

»
10 лет назад, # |
  Проголосовать: нравится 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?

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

    No, it's not true.

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

      Thanks, I realized my mistake while ago. I had to mess something during the contest.

  • »
    »
    10 лет назад, # ^ |
      Проголосовать: нравится +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)

  • »
    »
    10 лет назад, # ^ |
    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

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

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

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

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

      • »
        »
        »
        »
        10 лет назад, # ^ |
          Проголосовать: нравится +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

    • »
      »
      »
      10 лет назад, # ^ |
        Проголосовать: нравится +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...

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

        Lool, that is indeed a Kuglarz problem :D. Nice. So bad that I messed computations and came up with other formulas, Kuglarz was so nice it would be really fun to use that task in other problem. Btw, hi Maciek :).

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

        Sorry, doubled post, CF was not responding xd.

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

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

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

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

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

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

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

IGNORED

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

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

»
10 лет назад, # |
  Проголосовать: нравится 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.

»
10 лет назад, # |
  Проголосовать: нравится 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 :)

»
10 лет назад, # |
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 :\

»
10 лет назад, # |
  Проголосовать: нравится +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.

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

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

  • »
    »
    10 лет назад, # ^ |
      Проголосовать: нравится +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.
    • »
      »
      »
      10 лет назад, # ^ |
        Проголосовать: нравится +25 Проголосовать: не нравится

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

    • »
      »
      »
      10 лет назад, # ^ |
        Проголосовать: нравится 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) :(

      • »
        »
        »
        »
        10 лет назад, # ^ |
          Проголосовать: нравится +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.

        • »
          »
          »
          »
          »
          10 лет назад, # ^ |
            Проголосовать: нравится 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);

          • »
            »
            »
            »
            »
            »
            10 лет назад, # ^ |
              Проголосовать: нравится +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)

            • »
              »
              »
              »
              »
              »
              »
              10 лет назад, # ^ |
                Проголосовать: нравится 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.

  • »
    »
    10 лет назад, # ^ |
      Проголосовать: нравится +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().

    • »
      »
      »
      10 лет назад, # ^ |
        Проголосовать: нравится 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?

    • »
      »
      »
      10 лет назад, # ^ |
        Проголосовать: нравится 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)

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

IGNORED

»
10 лет назад, # |
  Проголосовать: нравится +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 :).

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

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

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

http://codeforces.me/blog/entry/13563 Please upvote if u agree :)

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

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

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

aah today I forgot to hack :)

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

Finally DIV1 ,Now I can RIP :D

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

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

  • »
    »
    10 лет назад, # ^ |
    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.

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

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

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

How is Div2 E supposed to be solved?

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

What is the purpose of custom invocation ?

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

  • »
    »
    10 лет назад, # ^ |
      Проголосовать: нравится 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.

»
10 лет назад, # |
  Проголосовать: нравится 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)

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

    Here is exactly the same algorithm used in Java 8. Submission in Java 8

    I have used the SAME algorithm and it comfortably passed the tests.

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

      Yes, when you see large input, don't rely on Python. You can blame the problem setters for having no better problem to put where every language can pass, or you can try learning a faster language. I decided to pass on this contest for the same reason.

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

        Well there should be some sort of additional time for Python to process large inputs then. I lost out on a lot of points because of that. I think the organizers of the contest should look into it. Nevertheless, I think I will use Java from the next round. It's quite frustrating to lose out on points just because of a language choice!

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

          I think there was a discussion about giving time limit multiplier (so Java has double time, Python has triple time, etc) long time ago, but it hasn't been pursued ever since.

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

            That's sad! I will Java from now on.

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

              You should C++ from now on.

              I had a similar situation recently, but outside a contest. I had a simple integral and binsearching on it, written in Python. But it wasn't accurate enough (I needed to take differences of close values), so I needed to improve the precision by increasing the number of steps. But Python's slow and it would've ran for hours — so I didn't complain that the time limits are slow and instead rewrote the solution in C++, resulting in massive increase in precision (from "powerful random numbers' generator" to "sufficiently accurate") and decent time.

              Programming is about improving runtime, not increasing time limits to fit your code.

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

                Thanks for the advice!

                Is Java also too slow for programming contests on Codeforces and other platforms? I already use Java well so learning C++ will require some additional effort. If it doesn't matter that much then I would rather use Java.

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

                  edit: yet again, doublepost

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

                  It probably is, I don't really know since I don't use it, I just heard what people said here. If you can use it well, then it's okay, but it still seems to have more speed-related fails compared to C++.

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

              edit: quadruplepost due to CF not responding

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

              edit: quadruplepost due to CF not responding

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

              edit: quadruplepost due to CF not responding

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

:-) Hello

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

Some stats about hacks can be found here.

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

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

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

    Или перевести по-символьно: Эпллмэн, Тоастмэн. В конце концов Бэтмэна мы же не зовём Летомышов.

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

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