Автор awoo, история, 4 года назад, По-русски

Привет, Codeforces!

В 22.03.2022 17:45 (Московское время) состоится Educational Codeforces Round 125 (Rated for Div. 2).

Продолжается серия образовательных раундов в рамках инициативы Harbour.Space University! Подробности о сотрудничестве Harbour.Space University и Codeforces можно прочитать в посте.

Этот раунд будет рейтинговым для участников с рейтингом менее 2100. Соревнование будет проводиться по немного расширенным правилам ICPC. Штраф за каждую неверную посылку до посылки, являющейся полным решением, равен 10 минутам. После окончания раунда будет период времени длительностью в 12 часов, в течение которого вы можете попробовать взломать абсолютно любое решение (в том числе свое). Причем исходный код будет предоставлен не только для чтения, но и для копирования.

Вам будет предложено 6 или 7 задач на 2 часа. Мы надеемся, что вам они покажутся интересными.

Задачи вместе со мной придумывали и готовили Адилбек adedalic Далабаев, Владимир vovuh Петров, Иван BledDest Андросов и Максим Neon Мещеряков. Также большое спасибо Михаилу MikeMirzayanov Мирзаянову за системы Polygon и Codeforces.

Удачи в раунде! Успешных решений!

UPD: Разбор опубликован.

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

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

Best of Luck

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

Best of luck

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

Good luck to everyone !

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

Hope to be specialist after this round

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

Hope to become CM tonight :> Good luck for everybody!

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

Hope for the best, but prepare for the worst.

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

Good luck guys!

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

Hope my rating's downward trend turns around in this contest.

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

I hope there won't be too much fst in this contest :-)

Don't click it
»
4 года назад, скрыть # |
 
Проголосовать: нравится +1 Проголосовать: не нравится

Good luck everyone! One day I will be a pupil.

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

Best of luck to everyone

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

Hope I will become grandmaster in today's contest

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

good luck to everyone this turn!

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

I am less confident in giving first contest just after getting promoted , it been a while since I get back to specialist . How to deal with this ?

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

Good luck everyone!

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

Good luck everyone!

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

Why 10 minutes delay?

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

Why many people on codeforces are so demotivating? I see many posts with too many downvotes even though it does not deserves downvote

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

why the start time became 10 minutes later?

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

Good luck everybody!!!!!!!!!!!!

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

delayforces REEEE

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

10 minutes delay

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

I Hope to become Pupil,today.

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

It is taking some time to load a page, same to you?

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

set easy questions from next time

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

Struggling to solve A.

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

A,B,C done! Good Night Everyone!

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

A,B,C Done! Good Night Everyone!

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

2 consecutive speedforces contests :(

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

speeeeeeeeeeeed forces!!!! :(

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

How to solve D.

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

Is F 2-SAT on edges with implications for every consecutive pair in some path, with LCA to find the actual paths?

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

What was the intended solution for D? Surely it wasn't sqrt decomp with log factor?

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

Is D supposed to be solved with parallel binary search? I came up with an $$$O(n log C)$$$ in the last 10 minutes but couldn't implement it even if my life depended on it.

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

Guys, can someone clear this up for me? I got TLs in C problem on GNU C++20 (64), but the same code passed all testcases on GNU C++17...

150525251 — Accepted (GNU C++17)

150522050 — TL on 4'th test (GNU C++20 (64))

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

Can anyone tell why my solution for problem C is giving TLE on test 5 ? My Solution

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

I made two submissions for D and the first submission appears in the standings currently. What happens if the first one FSTs? will the second submission be used?

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

How to solve the 4th (D) question?

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

    This one you can apply similar technique to prime Sieve. presumably, d, h is the type you select and D, H is that of monster, if you select n unit then this is true n*d*h > D*H. it's easy to see that d,h individually doen't matter, what matter is d*h.

    C is at most 10^6, so what if we calculate the maximum d*h we can get for each cost from 1 to 10^6. Turns out this can be precompute similar to Sieve, and the complexity is cheap.

    From there just binary search for each monster to see what's the cheapest cost such that the max d*h you get at cost ith is larger than D*H of monster

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

      I think I get it.

      The precomputation of the sieve is fast because there can be only one useful unit (the one with the largest d*h) for each cost c and so you need at most C/1 + C/2 + C/3 + ... + C/C computations which is O(ClogC) (harmonic series). (the unit with c=1 (if there is one) loops C/1 times, the one with c=2 C/2 times and so on)

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

      Very sad is that I got the idea and confused somewhere in implementation during contest :')

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

      Thank you for the explanation. I managed to implement the approach you described 150560762. Correct me if I am wrong, but the maxDH array (where the c'th slot stores the maximum d*h that c coins can get) that results from the prime sieve precomputation will have unvisited slots in some cases. So there is a need to do a pairwise max on this maxDH array from slot 2 to 1000000.

      Also, I had to store units information in units where the c'th slot of units stores the (d,h) all units with the cost per troop c.

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

How to prove A?

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

D was based on?

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

any hint for E?

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

    DP. The given condition can be rephrased as: for any two vertices X and Y other than 1, the weight of edge X -> Y should be no lesser than the weight of edge 1 -> X and 1 -> Y. We have N — 1 edges starting from vertex 1 which could form (N — 1) * (N — 2) / 2 groups. So, DP from weight 1 to K, dp[i][j] means, when we have assigned weights to j edges from vertex 1 and the max weight of them is i, how many choices we have. The transistion is:
    dp[i][j] = sum(dp[i — 1][l] * C(N — 1 — j, l — j) * power(K + 1 — i, j * (l — j) + (l — j — 1) * (l — j — 2) / 2) for all l < j which means, select l — j edges from N — 1 — j edges and assign them with weight i. combining them we have j * (l — j) + (l — j — 1) * (l — j — 2) / 2 groups of edges, weight of each group should be in [i, K]. The final answer is dp[K][N — 1]. https://mirror.codeforces.com/contest/1657/submission/150515462

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

      Maybe there is something wrong with your text explanation, but your code is absolutely right. I think text explanation should be fixed as below.

      dp[i][l] = sum(dp[i — 1][j] * C(N — 1 — j, l — j) * power(K + 1 — i, j * (l — j) + (l — j) * (l — j — 1) / 2) for all j < l which means, select l — j edges from N — 1 — j edges and assign them with weight i.

      We have chosen j points (called Vertex Set A) to connect to point 1 before and choose l — j points (called Vertex Set B) this time. Edges between points from A and points from B, as well as edges between two points inside B, should be no lesser than i. That is so called j * (l — j) + (l — j) * (l — j — 1) / 2).

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

      What do you mean by (N — 1) * (N — 2) / 2 groups? What are groups?

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

Can anyone please explain me the logic of today's A particularly when the ans is 2. How can we prove it that if the ans is not 0 or 1 it must be 2?

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

It's crazy I used string hash on problem C.

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

Thanks for having the 0 0 test case in the sample for problem A.

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

Why did $$$O(nc)$$$ pass QD pretests... Doing $$$n = 30000$$$, $$$C = 1000000$$$, $$$c_i = 1$$$, $$$d_i = 1$$$, $$$h_i = 1$$$ easily fails $$$O(nc)$$$...

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

Is there a better way to solve A other than brute force and dp for all 50*50 square from 0,0? Doing a bfs + dp for all test cases for A seem overkill.

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

Please Tell me randomization will pass F '~'

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

Memory limit exceeded on test 169 ^_^.......

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

I can't believe I tried to solve a problem using hashing in a contest two times in a row!

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

If you are/were getting a WA/RE verdict on problems from this contest, you can get the smallest possible counter example for your submission on cfstress.com. To do that, click on the relevant problem's link below, add your submission ID, and edit the table to increase/decrease the constraints.

If you are not able to find a counter example even after changing the parameters, reply to this thread, mentioning the contest_id, problem_index and submission_id.

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

Why my D question got hacked in this round, can anyone help me https://mirror.codeforces.com/contest/1657/submission/150523841

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

Someone asked me in a private message how to solve 1657C - Bracket Sequence Deletion.

Don't write private messages, just ask below the contest announcement (or editorial if there is one). There is a greater chance someone will answer and more people can benefit from such an answer.

Despite that, here my attempt at a newbie guide for overthinking 1657C - Bracket Sequence Deletion:

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

Educate by FST.

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

Solving A B C can give you a rank of 700 as well as 6500

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

Can any one help me out with D...Why is this giving Tle??? 150579927

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

Just curious, but I have finished this competition (this is my first ever CodeForces competition). However, apparently, as of 12:13 A.M. (UTC -7), 23 March 2023, I am still unrated. Is this supposed to be a problem? Thanks.

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

My CM dream come true :>.

Thanks BledDest, Neon, adedalic, awoo and vovuh.

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

in problem D is monster attacking all units with D[i] or his damage dividing between all units?

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

In D, I used the thing that for each type of squad unit. The min number of troops hence the minimum cost required will be,

troopCost * {floor(HjDj/hidi) + 1} 

I calculated this for each type of troop and printed minimum amongst them. However this logic fails for some very high input (wrong answer 36373rd numbers differ — expected: '802914', found: '808376')

Can anyone help me out, What am I missing?

Here is submission, https://mirror.codeforces.com/contest/1657/submission/150576954

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

Problem E can be solved in $$$O(kn\log{n})$$$. This solution works in 0.5s for test 1000 1000 (or even about 0.3s if ran under 64 bit сompiler).

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

Why is the E time limit at 6 seconds? Is it to let n^2 k^2 solutions pass (they did)? It's an insanely long time especially when most solutions are < 1s.

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

I've learned so many.

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

Auto comment: topic has been updated by awoo (previous revision, new revision, compare).