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

Автор the_nightmare, история, 5 лет назад, По-английски

Hi, Codeforces!

I'm glad to invite you to take part in Codeforces Round #721 (Div. 2), which will take place on May/20/2021 17:35 (Moscow time). The round will be rated for the participants with a rating lower than 2100. Participants from the first division are also welcomed to take part in the competition but it will be unrated for them.

You will be given 2 hours to solve 5-6 problems. Problems were created by members of Club of Programmers IIT (BHU)- rivalq, sharabhagrawal25, loud_mouth, DenOMINATOR, Bignubie, mallick630, shikhar7s, CoderAnshu and Me.

Huge thanks to those who helped make this round possible:

We tried our best to create interesting problems and simple-to-read statements and we hope you have fun! Happy coding :)

UPD

Scoring Distibution:- 500 — (750 — 1500) — 1500 — 2250 — 3000

UPD

Congratulation to the winners

Global

  1. ksun48
  2. jiangly
  3. alya_wow
  4. Geothermal
  5. TheIceKing

Div2

  1. alya_wow
  2. TheIceKing
  3. fqwmc
  4. l9ll6lll
  5. Lenstar

UPD :- Editorial

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

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

Hope this won't be similar to the math contest that was prepared by you guys (IIT BHU) earlier.

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

A contest by Indians after such a long time! Very Excited!!

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

As a tester, I want contribution. Problem set is great.

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

op

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

Nice work COPS-IIT BHU team.

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

Happy to take part in testing for the first time!!! As a tester, I recommend you to read all the problems.

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

As a tester the problems were great and I recommend everybody to participate.

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

omg Indian round

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

As a tester, I wish you good luck!

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

I hope the round is nothing like your username.

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

Hope to become pupil this time...

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

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

Kudos to the team for compiling a much awaited contest for us. I hope that the problems are indeed as simple-to-understand as they are to-read. :D

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

Why isn't demoralizer part of problem setters team.

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

I'm thrilled to take part in this contest. As it's prepared by one of my college senior of one and only IIT (BHU) Varanasi :).

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

[deleted]

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

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

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

[deleted meme]

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

Can I become pupil?

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

oh welcome back indians setters

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

Cheater becoming tester for the round strange!

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

Whenever there is an Indian contest Every Indian Contestant

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

I hope this Indian contest to be great the same as the greatness of the Indian educational videos on youtube that saves us in the nights of the quizzes XD

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

others: u need css to make websites look good. codeforces: hold my html links..

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

WowGood!Regardless of the difficulty of the question, I really expect this "simple-to-read statement"!

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

As a participant, I will read all the problems.

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

I hope this time its a codeforces round and not a jee round

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

IIT BHU giving the best coders of INDIA. One of the best Example demoralizer sir.

Not saying about college. I know its there own hard work.Just telling the fact That most best coder of India are from there

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

    lol college is doing nothing for good to student atleast in India,its all about their own labour and btw demoralizer dont even felt good to join college coding club cause he know colleg club is also good for nothing ,they are one of best cause they have done labour,Dont give credit to Indian colleges ,they are just big names from which noone learn thing of their own benifits

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

      Talking about colleges in India, it's okay if they do nothing for students to improve their skills. But there are some colleges (like my college) having too many assignments, classes, vivas and exams and there won't be much freedom.

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

Best of luck to all the participants :)

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

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

Strange Monogon did not ask for contribution this time :( Feeling unlucky already :((

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

Hope I become a pupil this time

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

Any update on scoring distribution? UPD : added

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

I hope I can solve only 2 problems...as a newbie...

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

Will B have a subtask? Asking due to the scoring distribution?

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

by looking at the number of people who registered , reminding people that you would have to use m1.codeforces / m2.codefores / m3.codeforces

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

what are subtasks? can anyone tell

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

Second question having a subtask seems scary.

Maybe it's combinatorics :o

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

Bruh, what is going on with that scoring distribution.

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

i can not register please . help the_nightmare

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

Are these guys MATH FREAKS?

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

Goodbye Specialist.

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

rainboy orz !

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

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

Whoever prepared problem B2 is an evil person

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

I suggest that every writer's first contest should coordinated by Anton in order to improve the quality of the contest(and avoid boring or classic problems like D,E).

And other coordinators should learn how to reject some problems?

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

I thought I would become expert today :|

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

Quite unbalanced problems

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

Lol, $$$B$$$ is harder than $$$C$$$, $$$D$$$ and $$$E$$$.

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

    Are $$$C$$$, $$$D$$$ and $$$E$$$ known Algorithms/Ideas?

    I managed $$$B$$$, the hard one could be solved with straight forward game theory and dp (was a bit ugly to implement though. The dp depended of 4 variables. 1. The amount of zeros coupled with a zero. 2. The amount of zeros coupled with a one. 3. Whether there is a central 0 in case of n odd. 4. Whether last turn a reverse was performed.).

    But for the love of God, I couldn't come up with anything for $$$C$$$ and didn't get to think about $$$D$$$ and $$$E$$$

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

      $$$E$$$ is D&C DP optimization

      $$$D$$$ is case analysis + implementation

      $$$C$$$ is just easy and described somewhere below

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

        E has a much simpler solution involving segment tree range updates. D is tree traversal and basic analysis on it C is simple, just think about the contribution of each element in the answer. The detailed solution will be given in editorial

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

        Can you explain Soln of D in detail?

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

        Ok, now: I finally did implement $$$D$$$: 116963680. And I absolutely positively can say: There's no way I would've managed this task in the contest. It is just plain more difficult than $$$B1$$$+$$$B2$$$ for me.

        I thought about the task yesterday in the evening and did come up with a solution. I sat down today implementing it: there were so many cases and implementation details. I did two logical errors which I had to find and fix (the message "wrong answer 1923rd numbers differ" on test case 5 (!) nearly gave me a heart attack. How was I gonna find that?). And the editorial doesn't look much simpler to me.

        So I state $$$B \lt D$$$.

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

        I don't know if it's too much to ask for, but I simply can't spot anything wrong with my solution for C. Please do have a look, chief

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

      C has a common idea with many "over all subarray" problems. Instead of counting weight of every subarray, you can count amount of weight an element adds to the final answer.

      Then it was just some mathematics to calculate the number of subarray an element contributes to.

      Keep track of index of each element, say $$$1$$$ occurs at indexes $$${1,5,8,10,...}$$$, then the contribution for this can be calculated as,

      for every index in this array:
          contribution += index*(suffix sum of ( n - all indexes above this index))
      
      • »
        »
        »
        »
        5 лет назад, скрыть # ^ |
        ← Rev. 2  
        Проголосовать: нравится +1 Проголосовать: не нравится

        Well funnily I already did split the indices into seperate vectors. And I tried to do some dp then, by somehow counting the amount of "subsequences with n times the same number".

        It just wouldn't come to my mind searching for the pairs only. With your hint implementing it was done in 5 minutes. Oh well! Thanks! :)

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

    I agree. I solved B at the end of the contest.

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

How to solve E?

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

how to solve C?

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

We will soon upload the editorial for the contest.

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

This contest was a nightmare for me!!

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

I could have become expert if i had not made the silliest mistake on problem A which will make my solution pass the pretests but will fail at higher values.

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

Coordinators should take the blame for not rejecting this shit.

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

I didn't like the problems at all. A and B were just stupid observations. Also, difficulty of C was probably overestimated.

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

Why DP failed on problem C. State: dp[i][j] = weight of subarray from [i,j] Transition:

if (A[i] == A[j]){
    dp[i][j] = 1 + dp[i+1][j] + dp[i][j-1];
}
else dp[i][j] = max(dp[i+1][j], dp[i][j-1]);
ans += dp[i][j];

While adding the weights of every subarray.

Submission: 116828863

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

How to solve B??

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

    Here is my solution. Let's call $$$f(i)$$$ to the symmetric position to $$$i$$$ if we take the center of the string as symmetry center.

    Now, the state of the game depends on:

    • the number of $$$i$$$ such that s[i]=='0' and s[f(i)]=='1'. Let's call this $$$C_{0,1}$$$.
    • the number of $$$i$$$ such that s[i]=='0' and s[f(i)]=='0'. Let's call this $$$C_{0,0}$$$.
    • whether the previous movement was a reverse or not. Let's call this a Boolean variable rev.
    • whether the middle value of the string is 0 or 1, (if the string's length is even we consider it as a 1). Let's call this a Boolean variable mid.
    • whether it's Alice or Bob's turn. Let's call this a boolean variable turn.

    So, the state of the game is the tuple $$$(C_{0,0}, C_{0,1}, rev, mid, turn)$$$

    Now consider d = score(Alice) - score(B). We can interpret the game as the following: Alice wants to minimize d and Bob wants to maximize d. So, we can have the following DP solution:

    $$$Dp(state)$$$: for the current state, if it's Alice's turn, what's the minimum possible value of d, and if it's Bob's turn, what's the maximum possible value of d. The transitions are straightforward. The time complexity is $$$O(n^2)$$$, and so it's the space complexity. Since this Dp doesn't depend on the input string, we can precompute this Dp (or do it recursively with memoization).

    Now, for the initial state of the game, if Dp(state) < 0, then Alice wins; if it's > 0, then Bob wins; otherwise it's a draw.

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

caseforces xD

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

.

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

    I don't understand how you can speak so disrespectfully of the efforts of other people who have made significant efforts to prepare. Oh, I see you prepared a lot of rounds and they were all great. Sorry, no.

    You probably didn't like the problems. You may not be alone in this. AND? people tried. The writers tried hard. The coordinators tried hard. Testers helped with testing. There were clear statements in the round, there were no mistakes in solutions and tests. You don't pay to participate. Enthusiasts put their energy into making you happy. They have failed to please you. Any set of problems — some like it more, some less. I urge you to maintain respect and express your criticism in a balanced manner and without harsh or offensive forms.

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

First time solved 4 Qs in div 2! Practicing DP for the past few days really worths it.

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

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

Problem B ruined the contest for me , I couldn't find any mistake in my code ,tried till the end but failed .:(

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

Finally getting to 1500! Ideas for A,B1 and C :

A
B1
C
C-code
»
5 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится
»
5 лет назад, скрыть # |
 
Проголосовать: нравится +56 Проголосовать: не нравится

badly missing antontrygubO_o.

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

D and E are boring ,and B is hard .

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

Holy smokes, what a nightmare.

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

Nice problem D! liked it.......

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

For E, I wonder how calculate cost(i, j) fast? Got tle in case 13 due to n^2 init

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

I see that many people in problem B have checked if count of '0' is odd and not 1 then its alice . But I dont understand. lets say its of size 5.
1000001 (starting string)
1100001 (alice = 1 , bob = 0)
1000011 (alice = 1, bob = 0 )
1100011 (alice = 2 , bob = 0)
1110011 (alice =2 , bob 1)
1100111 (alice =2 , bob = 1 )
1110111 (alice = 2 , bob = 2)
1111111 (alice = 3 , bob = 2)
hence bob wins.
could someone tell me what I am thinking wrong

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

I think B1+B2 can be solved by greedy: denote a as the number of 0 at some index i such that 1 at index n+1-i; and denote b as the number of other zeros. If a = 0 (here is the easy part): if b = 1 or 2 then Bob Win; otherwise, Alice wins if and only b is odd. If a = 1: Alice wins except case b=1 (draw). If a \ge 2: Alice wins.

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

the most weird contest I have ever seen

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

What is the idea for A ?

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

how to solve B2? it's harder then E for me.

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

    If the string is already a palindrome, then you can use your B1 solution and if not then ALICE always wins except in one case that is if the string length is odd and it has a zero at the middle and has only one position i such that s[i] != s[n — i — 1];

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

      Can you explain the thinking/idea behind this?

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

        Just tried all the cases on paper

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

Isn't Problem B misplaced? It should have been C or D according to the scoring distribution.

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

In B1 probelm who should be winner for 10000001 case and please mention the moves also

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

The contest was amazing. I think the most interesting problem of today's contest was B2. Thank you very much the_nightmare

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

A recursion based solution for B2:

  • U = number of 0s in position S[i] such that position S[n-i-1] = 1 (call them 'unbalanced' zeros)

  • B = number of 0s in positions S[i], i < n/2, such that S[n-i-1] is also 0 (call 'balanced' zeros)

  • Mid = 1 if n is odd and the middle position is 0, otherwise 0

  • Rev = True if last move was a reverse, False otherwise

Then rec(U,B,Mid,Rev) is the minimum possible score from that state.

If U = 0, B = 0 and Mid = 0, return 0

Otherwise, let best = INF

  • If U > 0, best = min(best, 1 — rec(U-1,B,Mid,false))

  • If B > 0, best = min(best, 1 — rec(U,B-1,Mid,false))

  • If Mid > 0, best = min(best, 1 — rec(U,B,0,false))

  • If not Rev and U > 0 (i.e. not a palindrome), then best = min(best, — rec(U,B,Mid,true))

These are the only possible transitions. If the score comes out positive, Bob wins, if it's negative, Alice wins, if it's 0, Draw.

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

    what will be the time complexity of this approach?

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

      U <= N/2, B <= N/2, Mid is from {0,1}, Rev is from {0,1}.

      The theoretical maximum complexity is N^2, but the constant factor reduction is very significant, since U+B <= N/2. Even if we ignore this bound, we have 500*500*2*2 states = 10^6. But we can also use memoization across the 10^3 test cases, so we will only evaluate at most 10^6 states over all test cases.

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

    If not Rev and U > 0 (i.e. not a palindrome), then best = min(best, 1 — rec(U,B,Mid,true)) can u plz explain this?

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

      Typo there. I've amended — apologies.

      The line represents the fact that if the string is not a palindrome (U > 0) and the last move was not a reversal (Rev = False) then we can flip to the other player.

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

    Can you please share your submission

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

    Glad to see this, I also followed a similar approach. I took $$$\mathcal{O}(N^2)$$$ time to precompute the memo, and then answered all queries in practically $$$\mathcal{O}(1)$$$ time (apart from having to read and process the input strings, of course).

    Submission link

    Short explanation:

    1. coz = count of positions such that it's a 1 on the left side and 0 on the other (asymmetric)
    2. czz = count of positions such that it's a 0 on both sides (symmetric)
    3. Note that we don't need a coo (count of positions such that it's 1 on both sides) because participants can't play on those positions.
    4. mid_set whether the middle bit is set or not.
    5. mid_max — the maximum value the middle bit can take. it is zero if the middle bit does not exist ($$$n$$$ is even).
    6. prev_rev whether the previous operation was a reverse operation.

    Note that all these parameters uniquely define the state of our game and the transitions that can be taken from such a state. I think now, the rest of the operations in the code are relatively straightforward. The total time complexity is $$$\mathcal{O}(N^2 + TN)$$$. Of course, this solution is an overkill imo :P

    But, jimm89 why do you not need to precompute the memo? Without precomputation wouldn't it blow up to $$$N^2$$$ in some worst case. Because of this I think I had got TLE in test 2 earlier with similar approach.

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

    Could you please explain a little why your transitions are 1 — rec(). Why minus? I'm curious about learning this approach. It seems to be helpful in many game related problems! jimm89. Sorry for unnecessary tagging, but I really wanted to know your thinking process in this recursion!

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

      Sure: I’ve reframed the problem to say that both players are trying to minimise the value of their own score minus the other score, so when they make a move which is not a reversal, we add 1 to their score, and then gameplay transitions to the other player. Anything the other player scores is then subtracted. Our final answer depends on whether, from Alice’s position, the best we can do is negative (win), zero (draw), or positive (lose).

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

Where do you guys get such problems? Although punishing, quite simple interesting!

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

My solution for C:

Store the positions for each unique number. Consider the example:

$$$[1,2,1,1]$$$

All pairs $$$(i,j)$$$ with $$$a[i] = a[j]$$$ are:

$$$a[i] = 1; [(1,3), (1,4), (3, 4)]$$$

Consider the pair $$$(i,j) = (1,3)$$$. For each subsegment that contains this pair, we have $$$(i)$$$ possible choices for starting position of the subsegment and $$$(n-j+1)$$$ for ending position of the subsegment. Using this, we can get number of subsegment containing each pair as $$$i*(n-j+1)$$$.

Let's say we store positions of all $$$1$$$ as $$$[1, 3, 4]$$$.

Then, $$$count_1 = 1*(n-3-1) + 1*(n-4+1) + 3*(n-4+1)$$$.

Note that $$$(n-4+1)$$$ is repeated twice since there are $$$2$$$ ones to the left of $$$a_4$$$. We could simply multiply $$$(n-4+1)$$$ by $$$(1+3)$$$. This is the prefix sum of positions of all $$$1$$$s before the current $$$a_4$$$.

Hence, for each unique $$$num$$$, $$$count_{num} = \sum\limits_{i=2}^{size(pos[num])} (n-pos[num][i]+1)*sum(i-1)$$$ where $$$sum(i-1)$$$ returns sum of all values in $$$pos[num]$$$ in range $$$[1,i-1]$$$ inclusive.

Sum of $$$count_{num}$$$ for all unique numbers is the final answer.

Submission

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

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

Sad that simple $$$O(NK \log(N))$$$ with long long and recursive lazy segment tree TLEed on E. Had to make some submissions and ACed with unsigned in the end. Did no tester face this issue or was it intentional to prevent other slower solutions for passing?

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

Don't know why but B1 and B2 for me easier than C a lot!! :)))

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

Sorry, my bad...

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

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

I am fucking brain dead holy shit

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

What will be the output for string '0000' in B1? I think the output should be "DRAW".

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

    No, lets say Alice puts 1 in any position 0100 Bob can make it 0110 then since it is pallindrome again, Alice has to enter 1 making it 1110 Then Bob can reverse and Alice would have to fill again. Thus, Alice lost

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

Can someone please explain why first soln failed but second passed?

  1. 116754150

  2. 116768652

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

How could Alice win with 10000?

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

    She just make the 2nd operation first then Bob have to put 1 somewhere. After we will have the same picture as in B1 version.

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

    Alice keep on reversing it in every turn until he gets a palindrome after bob turn.

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

    Alice reverses 00001 (score 0-0)

    Bob's options: (1) 10001, (2) 01001, (3) 00101 (note that 00011 is equivalent to 01001) (score 0-1)

    In scenario 1, Alice then places in the middle 10101, and from there Alice can force Bob to mark both remaining 0s.

    In scenario 2, Alice reverses on both her next two moves, forcing Bob each time to mark another 0.

    In scenario 3, Alice then goes 10101, and the outcome is the same as scenario 1.

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

I wonder why writers wouldn't use the term 'subarray' instead of 'subsegment' in C. I misread 'subsegment' as 'subsequence' and I'm sure there are many others who made the same mistake reading it for the first time. If your aim was to create simple-to-read statements why not use the conventional terms?

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

The why i fear problem C, this should not translate to fearing C cups.

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

casework solution for B2

let cd = count of a[i]!=a[n-1-i]
let c0 = count of a[i]==a[n-1-i] and a[i]==0

if cd==0: solve same as B1
else if cd==1 and n%2 and a[n/2]==0 and c0==0: DRAW
else ALICE

I can't prove how it works but it passed system test
AC code: https://codeforces.me/contest/1527/submission/116851873

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

What about cheaters ?

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

Here's my screencast from today's round. It's currently uploading and should be ready in the next few minutes.

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

bad round :(

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

How to prove the correctness of case based solution of B(1+2)?

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

    B1 feels intuitive. bob copies alice as much as he can until there's only 1 token left (on either side of the palindrome), in which he can flip it the final time to make alice go down an extra 2 tokens. be careful about n%2==1 where middle is open to '0' (as then alice can flip the script) and should be good.

    then B2, the logic is bob wants to make it a palindrome ASAP, otherwise alice keeps spam flipping. so we know that the cases eventually reduce down to B1. then, alice can also decide whether she wants to be the one to start case B1 by placing the final token herself, or keep spam flipping and let bob get to case B1 with it being his turn to move, and adjust costs accordingly.

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

From my point of view, task C was rather well-known and classical. This idea is obvious.

How could this task even get to this round? I thought that rounds are checked for well-known tasks with trivial and well-known ideas.

This could be compared with the task like "longest increasing subsequence" and some other basic tasks.

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

inkjhb

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

This contest was a disaster for me

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

Great

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

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

small hint for B2 : If the starting string isn't palindrome, Alice will win or it will be a draw. There is no way for Bob to win if the starting string isn't palindrome.

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

Test cases are weak for Problem A as my this solution also passed:- int main() { int t; cin>>t;

while(t--)
{
   long long int n,count=0,u;
   cin>>n;
   u=n;
   while(n)
   {
    u=n-1;
    n=n&u;
   }
   cout<<u<<endl;
}

}

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

What if the string is of 4 length and string is 0000 then it should be draw,because first alice will change first character to 1 so string becomes 1000 then bob reverses it and then alice changes it to 1001 now bob cannot reverse the string because its palindrome, now bob makes it 1101 and now alice reverses it and now bob again makes 0 to 1 so string became 1111 and both pays 2 2 dollar for changing 0 to 1 , so answer should be DRAW and not BOB

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

the score of B2 must be 1750 or 2000

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

How I solved A:

  1. Look at sample input and output
  2. Write the code
  3. Submit it
  4. Freak out that there are only 2 pretests and they were correct
  5. Now read the statement and spend 5 minutes verifying that the code was right.
»
5 лет назад, скрыть # |
 
Проголосовать: нравится -15 Проголосовать: не нравится

Sir MikeMirzayanov, problem B1 lacks tests that come out "DRAW"!!?

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

Problem E is similar to B. The Bakery.

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

Question B2 https://codeforces.me/contest/1527/submission/116807363 Can anybody tell on what test case this solution goes wrong??

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

    if(n%2 == 1 and s[n/2] == '0' and z == 1) change this line to

    if(y==2 and z == 1)

    test case — 10000 ans = ALICE operations

    alice(0) — 00001

    bob(1) — 10001

    alice(1) — 10101

    bob(2) — 11101

    alice(1) — 10111

    bob(3) — 11111

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

When will be the ratings updated ?

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

To not keep you waiting, the ratings updated preliminarily. In a few hours, I will remove cheaters and update the ratings again!

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

Can anybody highlight the Corner Cases for Problem B2... I am getting wrong answer on Pretest2...

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

    Try
    1
    7
    1100010

    Output should be ALICE.

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

      Yes, this is a nice case...my solution is not working. May i know ur approach? Whether dp is required here? Actually, i am trying for a generalized solution for both B1 and B2. B1 got executed, but is failing cases in B2.

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

        We can use DP in this problem, but it I don't think its necessary.

        I've just further built upon my solution from B1. If you've done B1, you might have noticed that Alice wins by one point when there are odd no. of 0s and Bob wins by 2 points when there are even no. of 0s (given both players play optimally and discarding the edge case of n=1). Hence whoever wins, wins by a margin of a maximum of 2 points.

        Alice's disadvantage in B1 is that the string is a palindrome when she starts; hence her first action can't be of reversing. She is forced to change a 0 to 1. But in B2, she can start by reversing the string if it isn't a palindrome, forcing Bob to change a 0 to 1. She'll keep spamming the reverse operation till possible, so the only way for Bob to stop her from doing this is by making the string a palindrome again.

        Now the cases reduce to how many zeroes need to be changed to make the string a palindrome. If 0 changes are required, then the answer would be the same as B1. If 3 or more changes are required, then Alice would win. Bob will change these 3 zeroes to ones, but once the palindrome is obtained, he can gain a maximum of 2 points more than Alice in the palindromic string (explained earlier), and hence will remain 1 point down in total.

        So the only cases which are required to solve for are 1 and 2 changes. I encourage you to solve these cases on your own. If stuck, you can refer to my solution, which I think is relatively simple.

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

May I know where is the mistake in my solution for Problem B2?

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

    I can tell you my approach. (Assuming you solved B1)

    In B2, if the input string is not a palindrome then Alice keeps on reversing the string until Bob makes it a palindrome. Once the palindrome is made, you can use your B1 method to see who wins. But here is the tricky part, Alice just doesn't wait until Bob makes the palindrome. If Bob takes k no.of operations to make the string palindrome, then Alice waits till the (k-1)th step and sees the future by using your B1 function which takes the finished palindrome string as parameter and assuming Alice starts the move.

    If B1 function outputs => DRAW or ALICE, then Alice will let Bob make the kth step too and proceeds.

    If B1 function outputs => BOB, then Alice will do the kth step and let Bob start the move once the palindrome is made.

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

Can someone tell me why my code is giving correct answer on local compiler but not on codeforces ones?(For problem B2 in today's contest)

I suspect there must be something wrong with declaring string as global variable.

My code

UPD : It's becoz i was using cout and puts in the same code. The code got accepted when i either used cout or puts solely. Don't know the technical concept behind it.

»
5 лет назад, скрыть # |
 
Проголосовать: нравится +11 Проголосовать: не нравится
My DP solution for question B2 is as follows:

Firstly, notice that if both s[i] and s[n-i-1] are 1, they are useless, we can comfortably remove them from our string. Next, if we have s[i] = 1 and s[n-i-1] = 0, let us swap them (swapping them will not make any difference to the current state of the game. WHY?). After this our string looks something like 000001010. Let us push all the 1s to the end of the string (Again, will not make any difference. WHY?) After this transformation, our string looks something like 0000000111 , basically X 0s followed by Y 1s (X >= Y).

We need one more parameter to define the state of the game because of one additional move mentioned in the problem (If the current string is not a palindrome and the previous turn has not been skipped, we can skip the move)
Let S represents a boolean variable representing whether the previous turn was skipped or not.

We can now represent any state of the game with three variables (X,Y,S)
DP (X,Y,S) represents the minimum number of flips from this state of the game.
Transition are straight forward:

   return 0 if X == 0 (kinda obvious)

   if (Y==0)
     -> delete the middle 0 (if possible), leading to (X-1,Y,0) 
     -> delete any other 0, leading to (X-1,Y+1)

   else
      -> delete the middle 0(if possible)
      -> flip the first zero, which will lead to the deletion of the last one, leading to (X-1,Y-1) {Flip 
          any zero actually, it will lead to (X-1,Y-1)}
      -> skip this move (if the previous was not skipped), leading to (X,Y,1)

Let the maximum of the states next to the current one be K, dp(X,Y,S) = X — K.

Finally, Score of Alice is dp(X,Y,0) {X,Y represents initial string}
Score of Bob is initial number of zeroes — score of Alice
The one with the lower score wins.

Link to my Submission : (https://codeforces.me/contest/1527/submission/116850107)
»
5 лет назад, скрыть # |
← Rev. 2  
Проголосовать: нравится +8 Проголосовать: не нравится

.....

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

Can someone help me in CodeForces 721 Div 2 Problem B1, what if the string is '0000' ,why the answer is BOB why not it is DRAW. Since both will play optimally and will not allow to win the opponent.

0000 Alice=0 , Bob=0 // in starting

1000 Alice=1 , Bob=0 //alice have to change

0001 Alice=1 , Bob=0 //bob reverse the string i.e. not want to spend money

1001 Alice=2 , Bob=0 // again alice have to change the

1101 Alice=2 , Bob=1 //bob has no other option but to change

1011 Alice=2 , Bob=1 // alice reverse the string i.e. not want to spend money

1111 Alice=2 , Bob=2 // again bob will change

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

Why editorial is not published yet?

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

can anyone tell me how BOB will win if S = 100001, in ques B. Thanks!

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

I think E in the contest is some kind of classical problem, can anyone please provide me link for similar questions for practice.

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

I didn't see anyone notice that B2 does not require DP, In B2 we just need to check if the given string is palindrome or not.

If it is a Palindrome then B2 solution is the same as B1 but if it is not a palindrome then we just need to count the number of zeroes and how many numbers are different. let Z : number of zeroes in the string and P : number of zeroes that need to change to make the string palindrome. if(z == 2 && p == 1) then only ans will be DRAW and in every other case ALICE will always win. code : here

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

    Yes that is right! Printing out the dp-table shows the same result. So if somebody is stuck on the game logic and can't work it through, he or she could do the dp, see the regularity, improve the answer and then be able to solve even bigger constraints, than dp allows (since the dp is $$$O(n^2)$$$ and your solution is $$$O(n)$$$).

    Just a miniscule heads up
»
5 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится

Can anyone help me why did this give me TLE its problem A- submission

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

    see, for A if you consider the most significant bit, then , adding all the numbers till the highest power of 2 smaller than will get you a number in which the most significant bit is one as for all numbers from n to 2^k, that bit is always gonna be one , but for 2^k-1 that goes to a 0 and rest to 1 whereas we already had 0s in those bits previously , so adding that fetches us 0.

    quite simply (2^k)&(2^k-1) = 0 and this is what was used giving us the and 2^k — 1

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

Super fast Editorials in the previous contests created a bad habit. Now I am angry since the editorial of this contest is not up yet XD

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

    No it isn't bad habit. I honestly don't know why it so hard to have the round started when editorial is ready. Usually the "late" editorials are added after 1 day. Would it be so bad to have the round 1 day later and have everything prepared? I don't think so.

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

When can we expect the editorial to be published...

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

Hi!

Can someone explain me why my submission to Problem C keeps failing (attempt)? I think I had got the idea behind it, but I failed pretest 5 times during the contest!

Thanks in advance!

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

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

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

nightmare round

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

Can somebody help me understand B1 in 721? There are two test cases that have been bugging me

TEST CASE 1 :-

7

1001001

I feel that the answer for this test case is DRAW because both Bob and Alice spend two Dollars each

TEST CASE 2 :-

7

1000001

I feel that the answer for this test case is BOB because Bob spends 2 Dollars and Alice spend 3 Dollars

CLEAR EXPLANATION OF MY POV:- In case1 :- step 1:- 1101001 (Alice spends a Dollar)

step 2 :-1001011 (Bob reverses the string)

step 3:- 1101011 (Alice spends a Dollar)

step 4:- 1111011 (Bob spends a Dollar)

step 5:- 1101111 (Alice reverses)

step 6:- 1111111 (Bob spends a Dollar)

Both Alice and Bob spent 2 Dollars each.

In case2:- step 1:- 1001001 (Alice Spends a Dollar)

step 2:- 1101001 (Bob spends a Dollar)

step 3: 1001011 (Alice reverses)

step 4:- 1101011 (Bob spends a Dollar)

step 5:- 1111011(Alice spends a Dollar)

step 6 :- 1101111 (Bob reverses)

step 7 :- 1111111(Alice spends)

Alice spent 3 Dollars and Bob spent 2 Dollars

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

.

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

Hello MikeMirzayanov ,Codeforces system sent me a message saying that my solution(116813246) for B1 matches with someone else's(whom I don't know) submission(116794282).Now I see that some part of our code coincidentally matches but that was the most obvious part of this question.In my opinion that part was quite straightforward and many people would be having similar implementation.Even given solution has similar code but that doesn't mean I copied from problem setter or vice versa.Please check my solution manually and tell if it looks plagiarised...