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

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

Привет, Codeforces!

30 марта 2016 года в 19:05 MSK (время московское) состоится очередной раунд Codeforces #346 для участников из второго дивизиона. Традиционно, участники из первого дивизиона приглашаются поучаствовать в соревновании вне конкурса. Этот раунд будет необычным: будет предложено 7 задач и 2,5 часа на их решение. Надеюсь, что все найдут для себя интересные задачи. Обратите внимание на необычное время начала раунда!

Задачи для вас готовили я (IlyaLos), Эдвард Давтян (Edvard), Данил Сагунов (danilka.pro), Роман Глазов (Roms) и Владимир Петров (vovuh). Хотелось бы сказать большое спасибо Глебу Евстропову (GlebsHP) за помощь в подготовке задач, Марии Беловой (Delinur) за перевод условий на английский и Михаилу Мирзаянову (MikeMirzayanov) за замечательные системы Codeforces и Polygon, а так же за помощь в подготовке контеста и идеи нескольких задач.

Разбалловка будет объявлена позднее.

UPD Разбалловка: 500-1000-1000-1250-1500-2000-2500

UPD2 Соревнование завершено! Всем спасибо! Разбор

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

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

Необычное время, необычная длительность, необычное количество задач... Может, стоит поправить "...очередной раунд Codeforces..." на "... необычный раунд Codeforces..."?

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

Expecting a good round :)

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

A regular Codeforces round after a long time :).

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

Just learnt coding about two weeks ago and this is my first round. Wish me luck!

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

Жду с нетерпением этот раунд! Спасибо всем тем кто стараются ради нас и проводят такие раунды!

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

Hope to advance to Div1 this time!

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

Just wondering : If there are 7 problems then why not make a Div.1 Round too?

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

Let's hope this be a nice round for everyone :D

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

Good luck everyone

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

Good luck everyone

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

It's been a long time since a totally normal rated Codeforces Round. :(

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

Интересно будет увидеть разбалловку для 7-ми задач

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

When Soni says something, you repeat it!
When Soni does something, you do it!
When Soni has something, you don't have it!
And that's so because Soni is a cool guy!

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

Why 7 problems for div.2???

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

I wonder if there's something that could tell me my expected ranking to get a +rating. Even 5 minutes before the contest would be great. Don't know if that's even possible though.

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

Can I request a 10 minute delay? The bus is slow : O

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

Funny. When using CHelper, you can see "April Fools Day Contest 2016" before today's round. Did that one already happen?

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

UPD Разбалловка: 500-1000-1000-1250-1500-2000-2500

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

Is something changed regarding contest registration. Though I registered, it's still asking for registration while submission.

http://i.imgur.com/35uAN1W.jpg

--- [Edit] Now option to register re-appeared, and can submit after re-registration.

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

.

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

Всем здравствуйте. Я пишу с планшета, написал 3-ю задачу, заблокировал, при попытке просмотреть код других участников для взлома, пишет "Content on this page requires a newer version of Adobe Flash Player" и появляется ссылка на флэш плеер, перехожу по ней, там пишут, что эта программа не предназначена для моего устройства. Что мне с этим делать? Заранее спасибо за ответ

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

Why is problem A blocked? I want to resubmit my solution.

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

I am not put in a room for hacking, so I cannot hack. Is this a bug?

EDIT: I also registered late, so I don't know if this is the problem?

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

Какая-то магия происходит. Пытался взломать двух человек. Переписал их код себе. У меня выдаёт неправильный ответ. Взламываю и получаю Неудачная попытка взлома ...

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

I don't want to see all human defeated by AlphaGo, but this will happen if AlphaGo passes all system tests

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

За 10 секунд до конца я не успел отправить решение, так как меня разлогинило.

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

Interesting contest, what was the solution to F?

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

    Loop through all the cells. If k is evenly divisible by the number in the cell, and cellnum*m*n is greater than k, then do a BFS across adjacent cells that are greater than or equal to cellnum. If we have processed k/cellnum nodes, immediately print YES, print a matrix such that any cell examined in this BFS is given number cellnum and all other cells are 0, and then return. If the loop completes without finding anything, print NO.

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

Please someone explain problem 5. I think it is somewhat related to cycle finding or some trick to be used using dfs/bfs.

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

    Answer can not exceed the number of connected components. So define answer=number of connected components. If there is a cycle in a connected component then decrease answer.

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

    Consider each connected component separately.

    If the connected component is a tree, the answer is 1. This is because there are only V - 1 edges — not enough edges for all vertices. It is not more, we can root the tree and direct all edges from parent to child. Only the root will have no incoming edges.

    If the connected component has cycles, the answer is 0. To see this, take an arbitrary cycle and direct the edges in it the obvious way. Now you can throw out some edges (and direct them randomly) to get a tree for every vertex in the cycle. Direct all those trees from parent to child and you'll see that all vertices have incoming edges.

    So, for each connected component, check if it is a tree, and if it is, add one to the answer.

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

    Alternate (greedy) solution:

    • count undirected edges as "inward" edges
    • use a min-heap to store number of incoming edges to each node
    • assign "inward" edges by popping off min heap

    at the end, the answer is the number of nodes without any "inward" edges (http://mirror.codeforces.com/contest/659/submission/17054791)

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

    Consider a connected component If it has a cycle it is possible to assign directions to edges such that no vertex has zero incoming edges
    If it has no cycles there will be exactly one such vertex
    So just count connected components which do not have cycles

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

    if you don't want to find cycles, then just count the number of edges in each connected component, you can do it by summing up the degrees of all nodes in that component then divide it by 2. if the number of edges is equal to number of nodes minus 1 then it's tree and there's no cycle, otherwise there's a cycle

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

Hacking test of B?

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

Задачки прикольные, кажутся сложными, а потом понимаешь, что всё просто

Почему мне не удалось взломать эту посылку? там из priority_queue достаётся 2 элемента, и 2ой сравнивается с верхним в оставшейся очереди, но эта очередь может быть пуста. как сломать это при условии, что очередь пуста?

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

Problem B Hack

3 1

dushyant 1 20

sumit 1 16

snigdh 1 16

Answer --> ?

PS — My submission will fail. :(

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

Look to the solutions of problems B and C user AlphaGo , they sent in 10:48 and 10:51, and had so different style code, i think it wrote by different people

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

why geometry why :'(

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

 Who is AlphaGO?

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

6 минут не хватило, чтобы разобраться, где ошибка в G =( Главное формулы правильные вывел, но забыл в коде в одном месте умножение поставить...

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

Please suggest an approach to solve F and G.

Thank you.

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

    F is already explained, as regards G I did dp:

    dp[i][0] — the number of ways where you remove something from position i and the remaining height is not greater than h[i+1]

    dp[i][1] — the number of ways where you remove something from position i and the remaining height is greater than h[i+1]

    Obviously if h[i] <= h[i+1] then dp[i][1] = 0;

    Hope that helps.

    Edit: If not, here is the submission implementing that logic: http://mirror.codeforces.com/contest/659/submission/17059428

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

    I think it can be solved in a greedy manner, using DSUs. Start processing the cells in decreasing order of their values. When you process a particular cell, check its neighbouring 4 cells. The cells among those 4 which have their values >= value of current cell, are combined with the current one using DSU. After each combination, check whether that set has the required number of cells (if value of the cell is v, the set should have at least k/v elements). The moment this occurs, you have found the answer. Assign exactly k/v cells of this set to v, and assign all remaining cells in the grid to 0.

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

Hack you back.

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

Would binary search in F pass the time limit?

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

Nice and balanced problem set, perfectly suits for div2 difficulty in my opinion. But, Problem statements were not easy to understand (at least for me).

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

Wasted my whole time on a silly mistake with B, could have easily solved 4 problems :( :( :(

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

Codeforces team: Please check FlappyBird's submissions.
http://mirror.codeforces.com/contest/659/room/112
Seems like he wasn't codding alone.

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

Any ideas how to solve C? I did simple greedy algo but it failed on tc #10.

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

На последних минутах придумал решение для F.

  1. Сохранить карту склада.
  2. Рассортировать все стоги по высоте, сохранив их первоначальное положение.
  3. Разложить k на простые множители меньше или равной максимальной высоты стога.
  4. Перебором пройтись при помощи простых множителей по всем делителям k до максимальной высоты стога, и если существует стог такой высоты как делитель, то мы проверяем количество вершин в компоненте связности около этого стога, где между соседними клетками есть путь, если обе клетки больше или равны делителю.
  5. Если нашли компоненту с количество вершин большим или равным k / (делитель k) то выводим его, иначе не получится реорганизовать склад.

Как думаете, такое решение зайдет?

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

    Не нужно ничего раскладывать. Все гораздо проще.

    Достаточно лишь отсортировать значения в ячейках по невозрастанию и пройтись по ним поддерживая СНМ.

    Каждый раз, когда добавили чиселку x, проверяем, если k делится на x и размер текущей компоненты не меньше k / x, то выводим ответ (обойдя компоненты дфсом, чтобы получить необходимое количество клеточек).

    Если не получилось найти ответ — выводим NO.

    Собсна, все.

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

What is approach to solve question D ?

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

Мне кажется, или я стал слишком часто попадать в одну комнату с кем-нибудь из своих друзей... За последний месяц раза 3-4 это случилось, причем 2 из них — подряд и с одним и тем же другом.

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

Before that contest finished, I was 1200 and now I have two failed problem and I am 3200. Ohhhhhh noooooo.

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

Anyone else not realize that you couldn't add to piles in problem F? I had the solution but made that dumb mistake ugh.

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

Can someone tell me some hacking tests for 'A'. A guy I know made 11 successful hacking attempts :D

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

Please enable upsolving !

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

I hate that kind of simple but tricky problems like A!

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

How is this even working?? Problem D. answer is n/2 — 2 ; http://mirror.codeforces.com/contest/659/submission/17055800

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

The difficulty of C, D, E problems weren't even of Div2 level.. The contest should be renamed to "DIV 3".

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

The difficulty of C, D, E problems weren't even of Div2 level.. The contest should be renamed to "DIV 3". 1000+ people solved C,D,E

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

Please someone explain this solution ( http://mirror.codeforces.com/contest/659/submission/17054528 ) for problem D.

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

I first submitted a solution in problem E which got WA in pretest 9, then i get a new idea which gets AC, but i do not understand why my first idea was wrong!!

I gets the in degree for each node and greedlly subtract the highest m value of them (one by one using priority queue ) and the answer is the number of zero in degree after that, and this is the code 17050130

why this is wrong?! what i missed here?!

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

When will the ratings be updated? Has anyone's been updated yet?

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

Can anyone help me please ? Why I am getting WA at Test 15 for Problem B ???

http://mirror.codeforces.com/contest/659/submission/17059710

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

Is AlphaGo not a single coder?

The coding style of the submissions by this account are different. For examples, solutions on C and F used:

#ifndef ONLINE_JUDGE
	freopen("input.txt","r",stdin);
	freopen("output.txt","w",stdout);
#endif

while others don't.

And solutions on E and F used:

#include <bits/stdc++.h>

while others don't.

We can find that the coding styles of different codes are not similar.

On the other hand, AlphaGo used only 3 seconds to submit B after C. Should this kind of accounts be banned?

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

Can someone tell me why I am getting TLE in my solution for B , I am trying to find bug around 2 hours : 17055144 ?

Thanks in advance.

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

First time to solve A-B-C-D-E during the contest time and guess what!! my rate decreased :(

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

Please let us open the problemset now

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

This is my first round to get an AC problem, nice problems (y)

btw this is also my first comment in CF xD

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

Can someone tell me what is wrong with my B solution? 17044686

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

Before and After system test

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

thanks dude! 17057269

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

I had a problem with the 53 test case of the B problem. My output is correct, and the author of the problem didn't estipulate any order of the names of the selected member of the team...

I got wrong answer, and the checker message was "wrong answer Jury solution is better than the participant [region=143]" ... I just don't understand the reason that i've received WA...

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

Can anyone explain this solution to E. for me? 17042676 by AlphaGo

I think I get that the array fa represents the "root" of each node's connected component. What are tot and TOT?

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

As the tutorial said, we can make a boolean array in problem c; but i failed to do it at c++, because array size of 1e9 was too great, can anyone tell me how to achieve that, thank you