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

Автор AmirrzwM, 2 года назад, По-английски

Hello Codeforces!

On Oct/15/2022 17:35 (Moscow time) we will host Codeforces Global Round 23.

It is the fifth round of a 2022 series of Codeforces Global Rounds. The rounds are open and rated for everybody.

The prizes for this round:

  • 30 best participants get a t-shirt.
  • 20 t-shirts are randomly distributed among those with ranks between 31 and 500, inclusive.

The prizes for the 6-round series in 2022:

  • In each round top-100 participants get points according to the table.
  • The final result for each participant is equal to the sum of points he gets in the four rounds he placed the highest.
  • The best 20 participants over all series get sweatshirts and place certificates.

Thanks to XTX, which in 2022 supported the global rounds initiative!

The problems were written and prepared by AmirrzwM, MohammadParsaElahimanesh and napstablook, AquaMoon, Cirno_9baka, mejiamejia, ChthollyNotaSeniorious, SSerxhs, TomiokapEace, SomethingNew, pakhomovee, rembocoder, SirShokoladina.

We would also like to thank:

Round Information:

  • Duration: 2 hours and 15 minutes
  • Number of problems: 7 problems and 1 sub task
  • Score distribution: 500-1000-1000-1500-(2000+1750)-2500-3500
  • There is an interactive problem, so please see the guide of interactive problems if you are not familiar with it.

We have tried our best to write clear problem statements and make strong pretests and we are looking forward to your participation!

UPD: Editorial

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

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

It clashes with Google Kickstart, can this round be postponed pls? Thanks!

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

    If you solve GK in 2h30min you still have 5min to rest before this contest.

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

      I think, for every contest we should try to solve problems till end of the contest. Sometimes, last problem gets accepted in last minute of the contest.

      If the contest gets postponed, it will be good for everyone.

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

    Score Distribution?

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

      Who is here after Kickstart ?

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

        Not after; Along with kickstarter! I came at 8:05, solved howmany ever were possible, and went back to kickstarter. Glad to share I cracked a problem in kickstarter in this small time period.

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

      It's not bolded (or math mode, I guess?) like it usually is, but it's in the third bullet point of the round information (end of post):

      500-1000-1000-1500-(2000+1750)-2500-3500

      E has the subtask, apparently

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

Hello. Is there any chance that the timing will be adjusted according to this request and this request? In fact, there was much more than just these blogs as I have seen.

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

    Gotta emphasize the message again.

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

      Well, is that indeed hard to postpone the contest by half an hour? I genuinely can't see any problems doing that, rather you will get a few hundred more participants that will be able to finish Google in time and then enjoy this event too. I believe there're a lot of people like me who wish to participate in both contest, yet try their best until the last minute on KickStart.

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

        No, you will lose participants from China who wants to go to bed half an hour earlier.

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

          Yeah, that somewhat does make sense, but going at 9.30 or 10,00 PM is I feel something more negligible than missing either a CF round or not going till the end on Google.
          ed. Actually the region thing is both ended: US guys will for example get 30 mins more of sleep if needed and probs more will join, so can't really judge like that.

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

Hope to become IM!!!

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

as author of 4 problems I wish you experience great contest ...

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

as a. . . Welcome to our round!

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

Dear authors, Can you please postpone or prepone this round a little bit as the time is significantly coinciding with Leetcode Biweekly contest 89. i.e. Codeforces contest will start just 5 minute after the beginning of the Leetcode biweekly contest 89. Please authors, Can you reschedule this round a little bit . It will be hard for many of us to choose one contest between them. Thank You.

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

    It isn't hard to choose, just do the global round and forget about Leetcode.

    It's simple, Codeforces > Leetcode

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

      what about google kickstart? it's from 12:00 to 15:00 UTC and Global round starts fron 14:30 UTC

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

Global round again Wow! Hoping for a nice round again!

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

I guess you forgot to mention t-shirts for top 30 and 20 random participants who will make into top 500.

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

Interactive Problem ftw!

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

Can it be postponed or preponed as it's coinciding with google kickstart and we need min. 30 min. Interval break as both of the contests are brain storming & wanna enjoy both the contest!!!

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

Hello! Should I participate in this round? Are the problems good?

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

    Sure

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

      How would you know?! You didn't even test >:((

      Te tin minte.

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

        Well, this was partly a joke (nevertheless, to improve, you should participate in rounds as much as possible, so the answer to the first question might be correct unconditionally).

        I can answer more seriously: recently Um_nik has stated the real opinion in the comment section, and despite me upvoting the comment (I liked the interruption of continuous "the great contest ever" comments chain), I've later agreed with dario's point which stated Um_nik's comment improper. Indeed, it's one more step to reveal in the comment section The Problem Statements Mystery.

        That is, I would not like any involved person answering you evenly. One of the solutions is to claim "good contest", but to do this, you don't even need to be a tester. So I've done it.

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

    My dear friend, how do you want me to answer you. . .

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

Hope, I will become pupil after this contest :).

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

Nice to see AquaMoon in problem-setter's list

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

Hello authors, Can you please postpone the contest by half an hour as Google kickstart will end at 20:30 IST. We will be very very grateful to you.

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

It will be good if this round can be postponed by half an hour, since google kick start happens 150 minutes earlier and last for 3 hours. (sorry the time cannot be changed, then I will do my best to AK the kick start within 2 hours and half)

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

Just a small clarification needed, will there be an update in the contest timings as it clashes with the GOOGLE Kickstart Round G which is supposed to last till 15:00 UTC?

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

Hmm, as I see, no one wrote a comment about clash with Google Kickstart??!!! So I have to write!

Please please please please, postpone this round!!!!!

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

Interactive problem 1
my solution: 176222751
Please help me. what's wrong in my code ?

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

    your algorithm will take 10^6 queries, and there are only 25 queries allowed. So you need to learn binary search https://mirror.codeforces.com/edu/course/2/lesson/6/1 , or from any other website which you prefer.

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

      But why wrong answer on test 1. it will take 12 queries. Is there any other reason ?

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

        Sorry for the late reply, The problem in your code is that it will not answer correctly if the number to guess is greater than the number you have already set, you have set that to 1 (ans = 1) so every number is greater than 1 so your while loop condition will never be true. So you are just giving 1 as output everytime. So, if you want to go with the algorithm you have, you should set the ans to 1e6+1 (1000001) in this case otherwise (input_number+1) so that it is always less than that and while loop will keep running until you get the right number... Ofcourse in this case you need to do ans-- in the while loop.

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

As a tester, I can confirm that the round is well balanced and you'll enjoy the problems.

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

7 problems and 1 sub task. I like it!

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

I'm not familer with global rounds,could someone tell me is it div.1 or div.2 or div.1+div.2 please?

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

Give me some upvote to get out of the negative contribution please ..

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

Hope to become expert after the cotest!

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

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

Hope to back to Master lol

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

Score Distribution?

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

score distribution?

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

why can't i register in the round ?

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

Worst global round ever, downvoted.

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

Should beginers try it? What is the level of dificulty?

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

    I would say the first 3 problems could all potentially be solved by someone who doesn't have a lot of experience with cp, but "beginner" includes a wide range of very different people.

    Anyways, problems don't hurt, just go ahead and face them.. If you try and find them to be too tough for your level of experience just move on and go back to them another day or perhaps read the editorial once it's available.

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

.

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

Damn in D I just can't find an efficient way to sort each vertex paths and then sort these paths in the parent vertex paths because we can't go in the same visited vertex and once all the vertices of the of the same parent vertex are visited we consider these vertices unvisited (not their children).. I think I know the main idea but can't find a way to code it.

Correct me if I'm wrong

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

    .

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

    Well, sorting the paths is easy. The real issue in that approach is 1) the best possible path relies on which paths can be used, requiring 2^|# leaves| states, and 2) it is not clear to me that greedily choosing the best possible path is optimal.

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

      It should be greedily because once we find all the possible paths we will repeat the same order so we could just sort these values in the array and depending on k%(number of leaves) we will know at which value we should stop

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

D was good problem, yet couldn't solve. How to choose the leftover k%(num_of_leafs) leaves, without breaking the rules(conditions) ?

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

    Let assume dp(u, k) return best result at u with k and k + 1 paths. Then for each node, we consider x = (k % num_child) best child. And the next best child is the answer for k + 1.176362632

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

    You only will use a child maximum once, so you only push to the parent the best child you didn't used.

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

D is easier, than B

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

E2 when exactly three candidates remain killed me :(

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

Please say that D was DP on trees

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

Is Problem E an IMO problem?

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

    It's essentially a special case of IMO2012 problem 3, except that this problem has an upper bound on the number of questions. But knowing this didn't help me anything, as in the IMO problem you just have to find a solution for the generalization to only one truthful answer in (k+1) questions (and in the end you can query 2^k + 1 numbers), but then your (mathematical) solution doesn't focus on minimizing the number of questions.

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

Great round! I love it <3

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

F is similar to a problem which I have made in our Online Judge (But this time I didn't solve F TAT).

And can someone help me find out the mistakes in this code ? Thanks a lot.

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

    The mistake in your code is that the random numbers that it uses are of poor quality. Specifically, the lowest bit of the numbers returned by rand() has a low period, and adding the previous number and taking the result modulo N (when N is even) doesn't change that. In fact, it is not difficult to make a single test that will break any periodic RNG with a period less than 300000.

    In 176407464, I modified your code to replace rand with mt19937, and it passed.

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

I feel problem E is similar (same?) with BOI 2022 communication, correct me if I'm wrong.

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

How to solve E? I was thinking about sending two patterns 1100 and 1010 twice (So e.g. if n=8 the two patterns arrays are [1,2,3,4] and [1,2,5,6]). Then in any case we can reduce the search space by half.

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

    For E1, eliminating 1/4 for every 2 queries is fine. I used two intersecting subsets.

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

      Though solving n=3 is the hardest part of the task...

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

      Wow, I feel stupid. I had two intersecting subsets as queries drawn on my paper, with various case distinctions about truth and lie etc. but I disregarded elements not in the subsets...

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

losing cyan cuz misread C's statement

i read in each operation it increases 1 to the suffix not i

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

Does anybody else misread C and tried to solve problem when you can increase suffixes just by 1?

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

I feel like I got the correct idea for D but bad implementation led me to a TLE. Is there a more effecient way to pick the optimal paths % child_count results among all children for every parent than simply sorting? Or maybe the intended complexity is actually O(n) and I am missing a detail?

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

    My idea was that we prepare two sets, $$$J$$$ and $$$T$$$ (for joking and truth). The idea is that if the latest query was honest, then the target is in $$$T$$$; otherwise, the target is in $$$J$$$. We can initialize them by querying half of the search space, where the half that's consistent with the answer goes to $$$T$$$ and the other half goes to $$$J$$$.

    For each query afterwards, we can split $$$J$$$ into two halves: $$$J_1$$$ and $$$J_2$$$, and also split $$$T$$$ into two halves: $$$T_1$$$ and $$$T_2$$$. Then we query $$$J_1 \cup T_1$$$.

    • If YES: Then $$$J' = T_2$$$ and $$$T' = J_1 \cup T_1$$$. We eliminate $$$J_2$$$ since consecutive answers cannot both be jokes.
    • If NO: Then $$$J' = T_1$$$ and $$$T' = J_2 \cup T_2$$$. We eliminate $$$J_1$$$ since consecutive answers cannot both be jokes.

    Let $$$J'$$$ and $$$T'$$$ be the new $$$J$$$ and $$$T$$$, and repeat. This way, we reduce the search space ($$$J$$$ and $$$T$$$ combined) by 75% in each query.

    EDIT: Upon testing, I realized this doesn't work, since only half of $$$J$$$ is removed this way. The sizes of $$$J'$$$ and $$$T'$$$ are not necessarily the same, so half of $$$J_1$$$ is not necessarily 25% of $$$J \cup T$$$.

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

    Divide number set $$$S$$$ into $$$a, b, c,$$$ and $$$d$$$,then query1:$$$a∪b$$$,query2:$$$b∪c$$$. Trust the results of two queries,we get a new number set $$$S'=a∪b∪c/a∪b∪d/...$$$(size of $$$3/4|S|$$$).

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

I am curious about the max rating fall on codeforces. It is a black weekend for me.

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

please someone tell me, what the wrong with my code for problem D 176366211

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

Any corner case for problem D?

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

How to solve C?

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

    +1

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

      +1

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

        You can start from a[1], you want all the numbers after it to be bigger than a[1] so you can just add a[1] to the suffix [2:n]. then go to a[2] and add a[2] to the suffix [3:n] ans so on. Notice that for example adding a[1] to the suffix [2:n] would not affects on the differences between the numbers in the segment [2:n] so it would not affects how you have to deal with them.

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

G is unsuitable for a codeforces contest.

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

    Why?

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

      My idea during the contest is to use a segment tree to simulate augmentations in max cost flow. It is simple but requires tedious coding and effort to fit the memory limit. I thought this was the intended solution, but it seems that the intended solution is a much cleaner one, so I take my previous word back.

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

        My solution works for any matroid. It is interesting that for this particular matroid there is another solution. Can you please explain how to solve it using flows? Does it work for arbitrary number of colors? What’s the complexity?

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

          Overview of my solution 176404703:

          Flow Graph.

          Nodes:

          1. source node, sink node
          2. one node per task
          3. one node per topic

          Edges:

          1. Sort the tasks in increasing order of day, and add directed edges from each task to the one after it with cost $$$0$$$ and capacity $$$\infty$$$.
          2. For each day $$$x\in {1,2,\dots,a+b+c}$$$, add one edge from the source to the leftmost task with $$$d_i\ge x$$$ with cost $$$0$$$ and capacity $$$1$$$.
          3. For each task $$$i$$$, add an edge from it to $$$type_i$$$ with cost $$$r_i$$$ and capacity $$$1$$$.
          4. For each topic, an edge to the sink with cost $$$0$$$ and capacity equal to $$$a$$$, $$$b$$$, or $$$c$$$.

          We want to find a maximum cost flow that saturates all edges of type 2. We will do this by adding an augmenting path for each day in decreasing order of day. All augmenting paths start from the source, pass through one or more topic nodes, and then the sink.

          Efficiently adding augmenting paths.

          It suffices to construct a data structure that maintains the following subpaths and their distances:

          • For each topic, the maximum-cost path from the endpoint of the day $$$x$$$ type-2 edge to the topic node using only forward edges of type 1 and a forward edge of type 3.
          • For each pair of topic nodes $$$l$$$ and $$$r$$$, the maximum-cost path from $$$l$$$ to $$$r$$$ using a reverse edge of type 3, backward or forward edges of type 1, and a forward edge of type 3.

          The maximum-cost augmenting path is the union of at most $$$k$$$ of these subpaths, plus a forward edge of type 4. Our data structure should also support updates of the form: Add or remove a range of backward edges of type 1.

          In general, we can use a lazy segment tree to maintain the subpaths. The segment tree should support updates of the form: Add or remove some range of backward edges of type 1. The segment tree uses $$$O(nk^2)$$$ memory and takes $$$O(k^3\log n)$$$ time to process each day $$$x$$$, if there are $$$k$$$ topics in total.

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

            Is there some reason why you process days in decreasing order? Seems like your solution doesn't depend on that.

            Another thing is that theoretically there might be an issue of overlapping backward subpaths, but it can be fixed manually by removing overlapping part of the path, right?

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

              It makes my implementation simpler (but it's not necessary).

              I believe that if you take the maximum-cost path that passes through the minimum number of topic nodes, then it won't use the same edge twice. This should work because the graph can never contain any positive-cost cycles.

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

why this code got WA. T^T? I want to know WA testcast.. 176378204

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

Garbage pretests on C, lots of hacks and wrong submissions passed.

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

    It's not about garbage pretests but strong programming debug testing skills IMO

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

      Yeah yeah yeah next time replace the pretests with the samples. That can train your debugging skills so well!

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

Can anyone explain the approach for problem D?

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

Only I think F much easier than E1 and E1 much easier than E2?

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

Anyone explain C ( I thought you can increase by one at each operation therefore I find next greater element for each from last and then made this current element equal to that and push this index min(diff,k) times but it was not that simple)

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

    Each operation on index i only affects the relation between i and i+1, therefore each operation should be dedicated to some consecutive pair of items in which the first one is bigger than the second. Let's create a differences array in which we will store a[i] - a[i + 1] for each 0 <= i < n - 1 that satisfies a[i] > a[i + 1]. Sort this array in an ascending order, and these are your "missions". Now obviously we rather use the earlier operations to satisfy the small missions, so iterate over the missions array and subtract the value of the current operation (starting from the first operation) until you complete it.

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

      What's wrong if i just print 1,2,....,n? Can you tell me some counter test?

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

          What would be wrong if I print index for every i such that a[i] + index = n+1?

          So for example for array : 1 3 4 2

          Why this answer is wrong? : 4 2 1 3.

          After all the operations , array would be: 5 9 11 12.

          So inversions is zero here. Did I understood question wrong? Jury is giving WA at this TC.

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

My Approach to E1 was the following: You ask for set A from [0 to 2 * (remain_size/ 3)] and set B from [remain_size/ 3 to remain_size]. if the responses are different, it means that the number is in the intersection between A and B, if the responses are the same, it means that the number is not in the intersection between A and B. Could someone please tell me what is wrong with this reasoning?

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

    if the responses are different, it means that the number is in the intersection between A and B

    Not necessarily. The number can be in the intersection, with YES being the honest response, and NO being a joke.

    if the responses are the same, it means that the number is not in the intersection between A and B

    Also not necessarily. WLOG suppose the number is in A but not B. Answering YES to both is valid, since the second answer can be a joke. Answering NO to both is also valid, since the first answer can be a joke.

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

    It sounds like you are counting joking responses as lies (ie valid but inverted) whereas they should just be ignored entirely. YES YES doesn't eliminate anything because it means it's either in A or B without saying anything about the intersection.

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

I think A is not that trivial. You might hesitate if you think a little bit more.

I guess many just reduce to k then use operation 2 once, but that won't work in the corner case "0 1 0" where k=2.

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

    You don't need 1st operation at all. Just apply 2nd until array become [1] or [0].

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

      Suppose n=20 and k = 15. After one operation-2 the array's length is 6 where you cannot apply operation-2 anymore.

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

    Can't you just do this - 1. If there is atleast one "1", answer is YES 2. Otherwise answer is NO

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

      Yes that's still correct, but the actual operations to achieve [1] might need case analysis.

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

      Yeah, but we are trying to find out why this works.

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

        If n > 3 then you can choose any 1 and there will always be two adjacent values not including that value which can be used to reduce n with operation 1 until n == k.

        Then you just have to check that n, k in (2,2), (3,2) and (3,3) are all possible which is easy to do (can all be done without ever needing operation 1).

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

    Actually, your approach is correct with single distinction: you should reduce to 2*k-1 and apply 2nd operation twice (like in this corner case you mentioned).

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

    In my opinion that's the best way a problem A/B can be. Still challenging, so you have to think to come up with a solution and beginners can develop their problem solving skills further than just improving implementation skills, but with a simple solution, so any beginner can solve it.

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

Memory limit exceeded on C, wtf ?

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

How the fuck does taking the difference array and not sorting it pass pretests in C?

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

Wrong Ans on test case 46, what? :( 176324763

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

nice contest but little sad that couldn't finish coding D in time , GRs should be given 2:30 hrs I think atleast

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

Is F solvable with Mo?

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

    Maybe hard because of the variety of $$$k$$$

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

    It has updates, so that would be O(N^5/3)

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

    I coded Mo with updates in $$$O(n^\frac{5}{3})$$$ but I can't make it pass. Maybe it's doable with tweaking the constants enough. The general idea is the following.

    Let's maintain $$$\mathit{cnt}[x]$$$ — the number of occurrences of a value $$$x$$$ and $$$\mathit{cnt}_2[i]$$$ — the amount of values that have $$$\mathit{cnt}[x] = i$$$. That is trivial with Mo with updates.

    How to obtain the answer for the query $$$k$$$ from that? Well, we want to take gcd of all $$$i$$$ such that $$$\mathit{cnt}_2[i]$$$ is non-zero. Then check if it's divisible by $$$k$$$. Obviously, there are $$$O(\sqrt{n})$$$ non-zero values.

    How to use that fact? Well, let's split the values into the ones that occur at least $$$P$$$ times in the entire array at least once throughout the updates. There will be about $$$\frac{n + m}{P}$$$ of them. To find them, maintain a set of values sorted by their $$$\mathit{cnt}$$$ and mark the top ones as big after every update. Must be $$$O(m \cdot \frac{n + m}{P})$$$ in total.

    So, we can check the values of $$$i$$$ from $$$0$$$ to $$$P - 1$$$ naively and then $$$i = \mathit{cnt}[x]$$$ for all big numbers $$$x$$$. That sums up to a $$$O(P + \frac{n + m}{P})$$$ query. So the optimal $$$P$$$ is around $$$\sqrt{n + m}$$$. Since taking consecutive gcds doesn't make your complexity multiply by log, it's still just sqrt.

    So there is a Mo with updates part that is pretty slow complexity-wise and all the other parts that don't exceed sqrt but have a large constant I guess.

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

      Thank you, got it
      It's good idea to find answer dividing cnt on small and large values, I came up with similar idea, but couldn't implement
      Yeah, my question was more likely "is there some implementation which fits TL" rather than "is it solvable"

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

Why does this pass lmao. I have not seen a solution like mine and I'm going to assume I somehow BSed through the problem.

https://mirror.codeforces.com/contest/1746/submission/176328481

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

    It's correct. The number of position where given and sorted differ (which will always be even) is exactly twice the number of swaps needed. If answer is X, first X mismatches would have a[i] = 1 and b[i] = 0, and second X mismatches would have a[i] = 0 and b[i] = 1. These lead to X swaps.

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

      Thanks for the explanation. I had that train of thought and decided to go with it, and I wasn't sure if it was true for all cases and if there was a corner case that I was missing. Thanks again.

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

    Because it's correct solution.

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

Weak prestests for C

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

Too many authors make a round tough.

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

Why so many FSTs on C? I guess many small cases were included in pretest.

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

    Actually, most fsts were from hacks with really small n (like 6 or 8). They just didnt put all permutations of small size on either pretests or systests.

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

what is the test 47 on problem C ? A lot of people are fallen down in test 47

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

I want to know how the answer of problem E changes.

My solution is: ask $$$82$$$ queries, each query contains $$$\dfrac{n}{2}$$$ numbers, randomly choose from $$$1$$$ to $$$n$$$.

A number $$$y$$$ can be the answer if and only if for every $$$i$$$, it satisfis query $$$i$$$ or query $$$i+1$$$. That is, if the answer is fixed, the possibility of recognize a wrong answer is $$$1-0.75^{81}$$$, It will get correct answer of a single test case with a possibility of $$$\gt 0.99999$$$. But the solution doesn't work on test $$$13$$$ for many times.

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

There are some solutions to E1 can be searched on the internet.

First , Second , Third

Should it be unrated ?

And what happend to F ?

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

Gonna tell my kids that contests used to have strong test cases

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

Really interesting E1-E2 problems!

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

Lmao FSTed both C and D :pepe_cry:

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

Tough round. What is the logic for problem C? I didn't get it, but many others thought they got it but failed system testing.

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

    .

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

    If you have a permutation of size n, you can always add to it in a way that all numbers become n+1. For example, for the permutation 3 2 4 1:

    [3, 2, 4, 1] + [2, 3, 1, 4] = [5, 5, 5, 5]

    (this ignores what is added to the suffixes)

    Finally, it is important to notice that the suffix additions won't change the relative order of the numbers in a way that it creates an inversion. The number of inversions will be 0. This way you can construct the answer.

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

      Spent over 2 hours on the question and didn't even understand the premise. Thought it was increasing by 1, instead of i.

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

.

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

can some1 help me in my B submission getting runtime error in test2 while all cases i can think of are coming right

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

    This line here is wrong : if(num0==n || num1==n) cout<<0<<endl;

    look at this test case :

    4
    1111
    

    answer is 3 not 0, another question what is the purpose of these variables : count, ok, temp2, I think they are useless.

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

editorial?

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

I misread ques C I thought that we can increase suffix of a by 1 rather than 'i' T_T

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

Sad Story: I passed pretest of problem F and got WA3 on system test. After system testing, I resubmitted 10 times (with different comments each time) and passed system test each time. What a terrible luck!

These are the accepted submission IDs after system testing: 176386615 176386593 176386555 176386511 176386479 176386450 176386432 176386407 176386386 176386363

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

    Me too. The same code got AC after ST but failed ST. So sad.

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

    Setters should definitely be more careful than this when setting a randomized problem.

    Editorial mentions "chance of failure is around $$$\frac{1}{2^{30}}$$$ so it's safe to submit", but nowhere they take into account the fact that you're answering 300000 queries for 100 test cases, so when you're running your algorithm 30000000 times, it doesn't look so foolproof anymore, does it?

    As soon as I read the problem I realized there was a decent chance someone would fail system tests here, and unfortunately it seems to have happened.

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

Need testcases for D as the test 2 is quite a big one.

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

Never waited this eagerly for any editorial.

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

Attention!

Your solution 176348990 for the problem 1746E2 significantly coincides with solutions Tutis/176348990, null_awe/176378653. Such a coincidence is a clear rules violation. Note that unintentional leakage is also a violation. For example, do not use ideone.com with the default settings (public access to your code). If you have conclusive evidence that a coincidence has occurred due to the use of a common source published before the competition, write a comment to post about the round with all the details. More information can be found at http://mirror.codeforces.com/blog/entry/8790. Such violation of the rules may be the reason for blocking your account or other penalties. In case of repeated violations, your account may be blocked.

I copied code from https://oj.uz/submission/592003

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

Can some one please help me why my subission failed for problem C?

In C I print index for every i such that a[i] + index = n+1?

So for example for array : 1 3 4 2

Why this answer is wrong? : 4 2 1 3.

After all the operations , array would be: 5 9 11 12.

So inversions is zero here. Did I misunderstood the question? Jury is giving WA at this TC(Test case 2).

Submission No: 176389069

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

    1 3 4 2 -> 1 3 4 3 -> 1 5 6 5 -> 4 8 9 8 -> 4 8 13 12

    as you can see there is one inversion in final array

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

    Because the array would be: 4 8 13 12

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

    If you add 1 to the number in position 4, you are not adding 1 to the 4 in the original array. Following the approach so that all numbers become n+1 (ignoring suffixes) the answer is 3 2 4 1. Here 1 is added to the number in position 3.

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

how to solve E1/E2?

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

any hint for today's D? I know the fact that I need I start with 1 and c1 will be k ,then go to its' children and divide their parent's value of C among them in a way that that everyone has C value of parent / child count & (parent / child count) + 1 but in which order should I distribute I am confused about that, any hint ?

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

can someone explain the solution for problem C

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

    You can start from a[1], you want all the numbers after it to be bigger than a[1] so you can just add a[1] to the suffix [2:n]. then go to a[2] and add a[2] to the suffix [3:n] ans so on. Notice that for example adding a[1] to the suffix [2:n] would not affects on the differences between the numbers in the segment [2:n] so it would not affects how you have to deal with them.

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

I think google kickstart is the common source from where people copied but i want to know proper reason why my code is not accepted for problem A and B and there may be chance that some concept matched with the other but whole code is not matched.

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

    You can start from a[1], you want all the numbers after it to be bigger than a[1] so you can just add a[1] to the suffix [2:n]. then go to a[2] and add a[2] to the suffix [3:n] ans so on. Notice that for example adding a[1] to the suffix [2:n] would not affects on the differences between the numbers in the segment [2:n] so it would not affects how you have to deal with them.

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

Anyone knows how to solve interactive problems on c#? I got Idleness limit exceeded despite flushing console Submission:176402733

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

Bad pretest. Got FST and dropped to candidate master.

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

    Have you tried proving your solutions instead of guessing?

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

      I didn't, but I realized the mistake I made in the code just after I saw "failed system test". So I think stronger pretest can avoid such kind of sad stories.

      I think what you said have reason. But it can't be an excuse for bad pretests.

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

I'm ikun, Henry Xu please shut up

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

FST for D because the inf I set is too small. LOL.

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

too weak pretest for problem c

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

There is a problem,if someone in the same room of me, and he also solve some problems,then some of his friends want to cheat, he don not wanna take any risk,so he might take picture of my code and send to his friends. Or there is no way for my solution D are similar to 2 people who submit a long time after, that might be a really serious problem

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

    I can't find another way how that 2 people get my solution for the problem D. I do not send mysolution to anyone ever

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

    What if this actually happened? What should we do to prove that we're innocent?

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

    It could be a really serious problem,and someone might have done this before.

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

I m surprised that few people didn't thought about two pointer in B. Got ac with two pointer.

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

When/where will the drawing for the t-shirts be announced ? For once I managed to do top 500

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

ao tao dau duma

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

Congratulations to tshirts winners! In a few weeks you will be contacted via private messages with instructions to receive your prize.

As usual, we used the following two scripts for generating random winners, seed is the score of the winner.

get_tshirts.py
randgen.cpp
List place Contest Rank Name
1 1746 1 tourist
2 1746 2 Um_nik
3 1746 3 AoLiGei
4 1746 4 duality
5 1746 5 zh0ukangyang
6 1746 6 jiangly
7 1746 7 DearMargaret
8 1746 8 353cerega
9 1746 9 hanbyeol_
10 1746 10 Sana
11 1746 11 ecnerwala
12 1746 12 WYZFL
13 1746 13 QuietBeautifulThoughts
14 1746 14 ksun48
15 1746 15 Ormlis
16 1746 16 Maksim1744
17 1746 17 Melusine
18 1746 18 noimi
19 1746 19 Benq
20 1746 20 mango_lassi
21 1746 21 3.141592653
22 1746 22 hos.lyric
23 1746 23 Chenyu_Qiu
24 1746 24 hitonanode
25 1746 25 heno239
26 1746 26 244mhq
27 1746 27 maspy
28 1746 28 turmax
29 1746 29 blackbori
30 1746 30 tokusakurai
34 1746 34 S2speed
46 1746 46 Thienu
52 1746 52 He_Ren
68 1746 68 conqueror_of_tourist
95 1746 95 chenxiaoyan
96 1746 96 Isonan
113 1746 113 BalintR
153 1746 152 ztcakioi
159 1746 159 RGB_ICPC1
166 1746 166 zmj2008AKIOI
196 1746 196 frokaikan
217 1746 217 mindino
229 1746 227 lingfunny
269 1746 269 toooooosimple
307 1746 307 PubabaOnO
337 1746 337 IanDeHaan
338 1746 337 mban259
342 1746 340 ToniB
499 1746 499 codelegend
500 1746 499 rniya