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

Автор gridnevvvit, 11 лет назад, По-русски

Привет Codeforces!

Скоро состоится очередной раунд Codeforces Round #302, задачи для которого придумал я, Виталий Гриднев.

Хочу сказать большое спасибо Максиму Ахмедову (Zlobober), Александру Игнатьеву (aiMR), Данилу Сагунову (danilka.pro) за помощь в подготовке задач, Марии Беловой (Delinur) за переводы на английский, Михаилу Мирзаянову (MikeMirzayanov) за замечательные системы Codeforces и Polygon.

Распределение баллов:

  1. Div1: 500 — 1000 — 1750 — 1750 — 2500
  2. Div2: 500 — 1000 — 1500 — 2000 — 2750

Контест закончен, поздравляем победителей:

Div1:

  1. Petr
  2. qwerty787788
  3. -XraY-
  4. kraskevich
  5. Merkurev

Div2:

  1. nka55
  2. never_retired_phoenix
  3. lowsfish

Разбор задач

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

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

"you are lucky to participate in Codeforces Round #302" I think I am lucky to participate all Round :D

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

That's strange! Contests are starting later and later in my country (first 8:00 pm, then 8:30 and now 9:00!), but the time in Codeforces' contests page is the same! Do the time modes in countries change so frequently?!

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

Where are these coders ?! Just 2555 registrants for now ?!

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

One more time. A good round on codeforces good luck and have fun everyone!!!!! who do you think will win this round? someone in special ??

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

I hope a nice contest with interesting problems for all the participants.

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

hope problem A isn't going to be HACKY! :D

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

Hoping good results and high ratings... and a lot of hacks!!!

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

I only say I must give up

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

Are all samples included in the pretests or just the first one?

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

Problem B confusing statement cause me a wrong submission. Should codeforces neglect the wrong submission before the announcement ?

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

    oh if we maximize also it gets accepted.

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

    yeah, it is extremely rare that a problem description (in this case div2 B) is changed multiple times during the contest.

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

    Let me clarify what happened during the contest.

    The original statement looked like the following:

    [start of the fragment]

    We will assume that a set of cells is an island, if the following conditions hold:

    • each cell of the set is covered with sand;
    • from each cell of the set you can get to any other cell of the set by moving only through the cells of the set, considering that in one move you are only allowed to move from one cell to a side-adjacent one;
    • you cannot add any cell to the set so that conditions 1 and 2 hold (in other words, the set of cells should be maximal).

    [end of the fragment]

    It is definition of the island that has nothing common with the rest of the statement. The given definition is one of the classical definitions of the connected component: the connected component is a maximal (i. e. unextendable, not maximum size!) set of vertices such that any two of them are connected with a path.

    In English words "maximal" and "maximum" have different meanings. For example, here you can see two different objects: maximum matching and maximal mathcing. When we say maximum, we mean maximum-cardinality. When we say maximal we mean such set that can't be extended with any other element without losing some property. And this was explicitly said in previous statement. It doesn't say that you should have no way to convert sea cell to a sand cell such that conditions 1 and 2 hold; it says that you should have no way to add an existing cell without losing conditions 1 and 2.

    Also, this part describes the definition of island. The actual task follows after this paragraph and it doesn't say anything about maximizing any kind of value. It is also illustrated by the sample test.

    Nevertheless, we've seen many clarification requests asking why the answer to the sample test isn't maximal in some manner. So we decided to clarify this part as possible. We said twice in global announcements that this definition is a usual definition of the connected component. That still didn't work, some people still were asking questions. Then we decided to even rewrite the definition making it less formal (!) but more clear to a newbie. But we want to point out the fact that at no moment the question was incorrect.

    You can try to formulate by yourself what is "connected component", it's not easy to do that without mentioning maximalness in some way. On CodeForces we usually try to provide formal definitions of things used in problems. Unfortunately, it sometimes leads to such issues.

    After a long discussion we decided to leave everything as it is and make the round rated. After all, there were lots of people who understood the statement correctly.

    Also, as someone noticed above in comments, even if you try to maximize something (total size of all components, for example) and you do that correctly, you will get your "Accepted" since our checker accepts all solution that have k connected components, no matter which size they have.

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

      The description that you posted was absolutely correct and unambiguous, you should not have clarified or changed anything. The current description is wrong:

      //start description

      We will call a set of sand cells to be island if it is possible to get from each of them to each of them by moving only through sand cells and by moving from a cell only to a side-adjacent cell. The cells are called to be side-adjacent if they share a vertical or horizontal side. It is easy to see that islands do not share cells (otherwise they together form a bigger island).

      //end description

      Nothing in that description says that a proper subset of an island isn't be an island. Not only is it not "easy to see" that islands don't share cells, it's wrong: if they share cells, they form a bigger island, but they're still islands anyway.

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

        That's what I mean by less formal. Of course you are right but the saddest part is that tens of questions per minute almost immediately disappeared when we rewritten the statement in such informal manner.

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

      I don't understand. Is this an island?

      SSS
      SLS
      SSS
      

      It does not satisfy rule 3, you can still add some cells to the set. (Please correct me if I am wrong)

      I understand that you just wanted to say "a smaller subset of cells of an island is not an island". But the definition is problematic here, because, unlike the usual graphs with nodes and edges, you have "sea cells" and "land cells" here.

      The first clarification doesn't help too (it even reinforced the feeling that you have to add as many cell as possible.) The island is the maximal set of sand cells on existing picture (meaning that you can add no new cell from the existing picture without

      Also an alternative way to clarify things is to add an extra sample that contradicts the belief.

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

Решал А 1:40, в последний 10 минут пытался написать B, не хватило 10 секунд, чтобы заслать =( Правда это решение даже тесты из условия не проходит...

UPD: Решение зашло, но его необходимо было отладить и потестить, то есть не хватило минут 10.

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

    а какая идея была в Б не подскажешь ?

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

      Ну за 10 минут до конца я придумал вот что: найдём минимальное расстояние от каждой вершины до каждой другой. После переберём вершину в которой маршруты из двух заданных городов сойдутся, переберём вершину, в которой этот маршрут разойдётся, ну и легко можно всё посчитать. Отдельно рассмотреть случай, когда маршруты не будут иметь общих рёбер. И еще уже сейчас понял, что стоит после этого поменять местами одну пару городов, так как маршруты могут по разному сходится.

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

What is the hack test of problem D in div1?? I think my solution is correct :(

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

I am one of those, who was registered, but didn't participate, because.. there were no any strong ideas in any problem..
Imho, there should be at least one easy enough problem in Div.1 in order to have a more honest rating.

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

you are lucky to participate in Codeforces Round #302 he said

Good luck and have fun he said

:(

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

Did better than usual, fun problems! Maybe I'll become Green again!

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

How to solve Div2 C Writing Code?

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

Problem B was quite confusing. Also the announcement just changed the problem. I think this round should not be rated

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

I guess almost all solutions will fail on testcase when divisibility by 109 + 7 was involved. I thought that my code handled it correctly, but unfortunately not and I was hacked probably using such testcase.

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

Anybody else who got WA #11 on Div2 C?

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

Ух, сложные задачки были в пердиве :) Вроде прикольно такие решать, но вот уходить с баранкой после контеста (впервые в жизни) совсем не прикольно :DDD

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

I wrote (almost) correct algorithm for B and D, expecting it to pass. Then I tried to solve C for like 20mins and still have no idea how to solve it. So I decided to code whatever greedy & dp comes to mind (I first code some DP, which got WA5, so I added some greedy).

Now I failed B & D, but my C is correct.

So surprised...

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

    What sort of greedy? I just used set cover.

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

      Uhm, it's very complicated to describe in words, but I'll try.

      So first, about the DP solution:

      • Let's call f(i, S) = minimum cost after we used first i characters, to make the set of strings S good.
      • For each (i, S), I tried each character c. Let S2 be the set of strings where the (i+1)-th character is c --> I use f(i,S) to update f(i+1, S | S2)
      • Note that I always use whole set S2, which is obviously wrong.

      So I updated my DP, allowing adding single character at a time, using min(cost to change this character, cost to change all same characters),

      which I think must still be wrong, and I think the correct thing to do here must be considering all subsets of S2.

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

        If I'm reading your code right, when your DP updates mask | TWO(x) using a single character, mask | TWO(x) hasn't been processed yet, so it can add another single character when you get to that mask.

        So your code actually is considering all subsets, and it is actually the correct solution (iterating over all subsets would clearly TLE).

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

i cant be happy anymin

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

You should not maximize the sizes of islands.

That was after a lot of WAs. -_-

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

O(NMB) is too slow for A Div1? I got TLE.

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

The time limit for A is way too tight.

I suppose there was a 500 500 500 case in the pretest. Branch predictor and memory causes it to TLE in system tests.

When I resubmit the same code, case 7's time increased from 25xx ms to 29xx ms.

UPD: gridnevvvit has replied that using long long instead of int causes solution to TLE. I strongly believe that the jury should NOT test for such differences.

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

How is Div2 D / Div1 B supposed to be solved?

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

Rule 3 : Ignore rule 3 XD

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

Правильно ли я сделал, что моя первая посылка на контесте была за 17 минут до конца? Или нужно было всё таки подождать окончания и уже тогда засылать, чтобы не рисковать рейтингом. Кто-нибудь еще так делал?)

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

Does anyone know when the ratings will be updated?

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

Worst feeling of missing Rank-1 just because you kept the array size in Problem A one less than what is required. Silly mistakes!! :\ :(

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

I wonder if BFS was an overkill for DIV 2 Probelm B? Also tricky testcase. Watch out for number of island =0! eg-> 1 0. I messed up due to this. COrrected it now to get AC :/

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

С задачей Б поступили как-то очень некрасиво... я её решил с учётом максимизации островов и невозможности добавления новых несвязных островов (про это было сказано в задании) и претесты были пройдены, а под конец соревнования это правило убрали (из-за чего финальные тесты решение не прошо).

Например на тесте

4 7

с учётом первоначальных условий решение будет "NO", т.к. есть возможность добавить ещё 1 остров несвязный с остальными, а с новыми условиями ответ будет "YES"

YES
LSLS
SLSL
LSLS
SLSS

Нельзя так на ходу кардинально менять условия задачи :(

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

Problem — A

Why my Solution skipped? — 11027863

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

What is the complexity of this solution 11033699 for Div.1D ?

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

 Is it written anywhere that today's contests are unrated? seems something is missing in the highlighted area which exists in other rated contests!

UPD: Actually I wanted to tell about rating changes, but some reason the picture had not shown. However, Ratings are updated and all confusion went out of the air!

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

good contest but not for beginner :D

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

I wish I had fixed my hacked B 30 seconds earlier......

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

What was the official solution of E. My O(S(32 + N / 32)) passed with 3.7 seconds and 54MB.

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

Расскажите про E.

Я вижу следующий прекалк: сканлайн по значению, а внутри персистентное дерево отрезков с операциями += на отрезке и минимум на отрезке.

Запросы обрабатываем online. Суммарное время (N+S)logN, памяти NlogN.

Весит эта конструкция на макстесте после серии оптимизаций 70 mb. ML = 64 mb.

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

    Делаем сканлайн по значению, песни разбиваем на блоки длины . Каждые обновлений сохраним три величины: значение первого элемента в блоке, минимум на блоке, и плюс дополнительно не более обновлений, которые пришли в текущем блоке, но не покрывали полностью заданный блок. Используя эти значения ответим на запросы. Итог: 8мб памяти и примерно в два раза медленнее решения с деревом отрезков

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

    Похоже авторы решили завалить это решение, поскольку оно слишком простое. У тебя 70MB чистое решение дало или хорошо нахаченное? У меня решение без хаков занимает около 300MB при n=200000, m=33000 (не очень понятно при каком m достигается наибольшее количество вершин, так что точно сказать не могу). Конечно на запросы максимума я вершины не создаю.

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

      У тебя 70MB чистое решение дало или хорошо нахаченное?

      Да, слегка нахаченное =)

      1. Вершина дерева { int left : 24, right : 24, add : 18, min : 18; } через двоеточие указано число бит, всего получаем 84 бита на вершину 10.25 байт. Всё это пишем битовыми массивами.

      2. Вершина дерева -- это индекс в массиве вершин, т.е. целое число от 0 до 224. На самом деле вершин всего будет 200 000 * 17 * 2 < 7 000 000. Т.е. один бит лишний, сейчас мы этим воспользуемся.

      3. Если всё поддерево равно числу X, то указатель на такое поддерево можно хранить, как число 223 + X.

      4. Изначально дерево пустое, храним его, как root = 223 + 0.

      5. Нужно ещё пояснить, почему за один change (плюс равно на отрезке) будет добавляться не более 17 * 2 вершин, это следует из того, что везде, где можем, мы используем (3).

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

        Персистентное дерево отрезков все таки можно запихать — фишка в том, что нам не надо хранить add, совсем! Мы можем пересчитывать его на лету вот так: add = this.min - min(left.min, right.min).

        Так же одну вершинку можно запихнуть в 64 b, если не добивать все до степеней двойки, а кодировать вот так: encoded = MAX_min * (MAX_left * right + left) + min, где MAX_min = 200 001 и MAX_left = 8 000 000 (у меня вышло чуть менее 8M вершин в худшем случае).

        Вместо твоей оптимизации (3) — не хранил листья как отдельные вершины, просто на предпоследнем уровне вместо left и right хранил соответственно left.min и right.min.

        PS Если кому вдруг интересно — вот сабмит 11072405

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

          Хорош!

          Мне казалось, оптимизация (3) действует не только на уровне листьев. Когда мы делаем один change, нам может понадобиться создать 4logn новых вершин, но на каждом уровне две из четырёх будут вида "отрезок равных элементов".

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

          Круто!

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

Can someone explain why my Solution on Div2 B got a TimeLimit in the first Testcase? On my Computer i got an solution instantly and uploaded it twice in the contest

http://codeforces.me/contest/544/submission/11031166

I noticed that i have an WA as well, but there wasn't enough time to fix both...

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

/**/

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

Could anyone explain how to solve Div1 D? Thanks)

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

What an awful contest?!

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

Спасибо за раунд, задачи было интересно решать на протяжение всего раунда! Жаль только, что сложными оказались :)

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

I didn't receive email notification for this round :(

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

My code (for Div1 D) is getting WA. I couldn't find it. What do you think is my mistake?

Submission: 11058128

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

Может кто нибудь объяснить задачу Е с див 2_) Заранее спасибо

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

Why the memory limit is 64MB, not 256MB, in Div.1 E?