Problem A is developed by mejiamejia.

#### 1733A - Consecutive Sum

**Hints**

**Hint 1**

$$$i$$$-th element moves only to $$$(i + xk)$$$-th position ($$$x$$$ is integer).

**Hint 2**

We cannot select $$$a_i$$$ and $$$a_{i + xk}$$$ simultaneously. In other words, if we can swap $$$a_i$$$ and $$$a_j$$$, we cannot select $$$a_i$$$ and $$$a_j$$$ simultaneously.

**Hint 3**

Among all elements $$$a_{i + xk}$$$ for each $$$i$$$ ($$$1 \le i \le k$$$), only one element is selected.

**Solution**

For each index $$$i$$$ ($$$k + 1 \le i \le n$$$), there is exactly one element among $$$a_1$$$ to $$$a_k$$$, which can swap with $$$a_i$$$. If $$$a_i$$$ is greater than that element, swap them. This process perform the operation at most $$$n - k$$$ times. After performing operations, select $$$a_1$$$ to $$$a_k$$$. This is the maximum score we can get.

**Solution Code**

**Challenge**

After performing all operations, select $$$p$$$ consecutive elements. $$$p$$$ can be different from $$$k$$$. Find the maximum score.

#### 1733B - Rule of League

**Hints**

**Hint 1**

Because one of player $$$1$$$ and player $$$2$$$ win $$$0$$$ games and the other win at least $$$1$$$ game, $$$\min(x, y) = 0$$$ and $$$\max(x, y) > 0$$$ must be true in order to generate a valid result.

**Hint 2**

There are one winner and one loser for every match. So the sum of winning count and the sum of losing count are same.

**Hint 3**

The sum of winning count is a multiple of $$$\max(x, y)$$$. Therefore, the sum of losing count is also a multiple of $$$\max(x, y)$$$.

**Hint 4**

(The sum of losing count) equals to $$$n - 1$$$. So $$$n - 1$$$ is a multiple of $$$\max(x, y)$$$ if there is a valid result.

**Solution**

According to hints, $$$\min(x, y) = 0$$$ and $$$\max(x, y) > 0$$$ and $$$(n - 1) \,\bmod\, \max(x, y) = 0$$$ holds in order to generate a valid result. If so, player $$$1$$$ and player $$$2$$$ would play first. Let's consider player $$$2$$$ wins. Then player $$$2$$$ should win $$$\max(x, y)$$$ games, and loses to player $$$\max(x, y) + 2$$$. Likewise, player $$$\max(x, y) + 2$$$ wins $$$\max(x, y)$$$ games and loses to player $$$2 \cdot \max(x, y) + 2$$$. Construct the remaining result in the same way.

**Solution Code**

**Challenge**

Expand $$$x$$$, $$$y$$$ to $$$x$$$, $$$y$$$, $$$z$$$?

#### 1733C - Parity Shuffle Sorting

**Hints**

**Hint 1**

If all elements are equal, that array is also non-decreasing.

**Hint 2**

For each operation, one element is changed. Because we have to use at most $$$n$$$ operations, an element change occurs at most $$$n$$$ times. Considering that the initial array can be decreasing, at least $$$n - 1$$$ operations can be needed in some cases.

**Solution**

If $$$n = 1$$$, do nothing.

Otherwise, select indices $$$1$$$ and $$$n$$$ to make $$$a_1$$$ equal to $$$a_n$$$ first. After that, for each element $$$a_i$$$ ($$$2 \le i < n$$$), select indices $$$1$$$ and $$$i$$$ if $$$a_1 + a_i$$$ is odd, and select indices $$$i$$$ and $$$n$$$ otherwise. This process requires $$$n - 1$$$ operations and make all elements equal, which is also non-decreasing.

**Solution Code**

**Challenge**

Find the minimum number of operations?

#### 1733D1 - Zero-One (Easy Version)

**Hints**

**Hint 1**

Consider $$$c$$$ is another binary string, in which $$$c_i = a_i \oplus b_i$$$. We have to make $$$c$$$ equal to $$$000 \ldots 000$$$ using the operation.

**Hint 2**

Because the operation does not change the parity of the number of $$$1$$$ in $$$c$$$, the answer is $$$-1$$$ if $$$c$$$ has odd number of $$$1$$$.

**Hint 3**

If the number of $$$1$$$ in $$$c$$$ is $$$d$$$ (now assume that $$$d$$$ is even), at least $$$\frac{d}{2}$$$ operations are needed. So total cost would be at least $$$\frac{d}{2} \times y$$$.

**Hint 4**

One $$$x$$$-cost operation can be replaced with two $$$y$$$-cost operations.

**Solution**

Consider another binary string $$$c$$$, in which $$$c_i = a_i \oplus b_i$$$ ($$$1 \le i \le n$$$). So doing an operation means selecting two indices of $$$c$$$ and flipping them. Also, let's define $$$d$$$ is the number of $$$1$$$ in $$$c$$$. Because the parity of $$$d$$$ never changes, the answer is $$$-1$$$ if $$$d$$$ is odd.

If $$$d$$$ is even, classify the cases:

$$$[1]$$$ If $$$d = 2$$$ and two $$$1$$$-s are adjacent, the answer is $$$\min(x, 2y)$$$. Because $$$n \ge 5$$$ holds, we can always replace one $$$x$$$-cost operation with two $$$y$$$-cost operations.

$$$[2]$$$ If $$$d = 2$$$ and two $$$1$$$-s are not adjacent, the answer is $$$y$$$.

$$$[3]$$$ If $$$d \ne 2$$$, select $$$i$$$-th $$$1$$$ and $$$(i + \frac{d}{2})$$$-th $$$1$$$ each ($$$1 \le i \le \frac{d}{2}$$$). This costs $$$\frac{d}{2} \times y$$$, and we showed the cost cannot be reduced more in hint 3.

**Solution Code**

#### 1733D2 - Zero-One (Hard Version)

**Hints**

**Hint 1**

Greedy solution used in D1 doesn't work in this version.

**Hint 2**

The restriction accepts normal $$$O(n^2)$$$ solution.

**Solution**

(Continued from D1 editorial)

If $$$x < y$$$, greedy approach used in D1 doesn't work. Let's use DP. Define $$$z0[i][j]$$$ as the minimal cost when there is $$$j$$$ $$$1$$$s in first $$$i$$$ elements of $$$c$$$ and $$$c_i = 0$$$, and $$$z1[i][j]$$$ as the minimal cost when there is $$$j$$$ $$$1$$$s in first $$$i$$$ elements of $$$c$$$ and $$$c_i = 1$$$. Initially all table values are $$$\infty$$$.

First, check $$$c_1$$$. If $$$c_1 = 0$$$, set $$$z0[1][0]$$$ to $$$0$$$. Otherwise, set $$$z1[1][1]$$$ to $$$0$$$.

Then, check the following elements from $$$c_2$$$ to $$$c_n$$$ in turn.

$$$[4]$$$ If $$$c_i = 0$$$,

$$$[5]$$$ If $$$c_i = 1$$$,

for $$$0 \le j \le i$$$. The answer is $$$z[n][0]$$$.

**Solution Code**

**Challenge**

Solve $$$n \le 10^5$$$ version. Some testers found $$$O(n)$$$ solution.

#### 1733E - Conveyor

**Hints**

**Hint 1**

Each second, slime ball moves to next diagonal.

**Hint 2**

Every slime always locates in different diagonal.

**Hint 3**

No two slime ball will merge forever.

**Hint 4**

If $$$t < x + y$$$, the answer should be "NO".

**Solution**

In the conveyor, cells with same $$$(i + j)$$$ value consists a diagonal ($$$i$$$ is row number, $$$j$$$ is column number). Let's call them $$$(i + j)$$$-th diagonal. So there are $$$239$$$ diagonals, from $$$0$$$-th to $$$238$$$-th.

So, we can find every slime ball move to the next diagonal for every second. It means no two slime ball merge forever.

Given $$$t$$$, $$$x$$$, $$$y$$$, cell $$$(x, y)$$$ belongs to $$$(x + y)$$$-th diagonal. If $$$t < x + y$$$, the answer is NO because there is no slime ball in $$$(x + y)$$$-th diagonal yet. If $$$t \ge x + y$$$, $$$(x + y)$$$-th diagonal contains one slime ball, and the ball is placed on cell $$$(0, 0)$$$ after $$$(t - x - y)$$$ seconds from the start. So $$$(t - x - y)$$$ slime balls passed this diagonal before.

Now, find out which cell contains slime ball among the diagonal. To do this, we use following method: simulate with $$$(t - x - y)$$$ slime balls to check how many slime reach each cell of the diagonal, and repeat this with $$$(t - x - y + 1)$$$ slime balls. Exactly one cell will show different result, and this cell is where $$$(t - x - y + 1)$$$-th slime ball passes through. If this cell is equal to $$$(x, y)$$$, the answer is YES. Otherwise the answer is NO.

Simulation with $$$x$$$ slime balls processes as follows:

- Place $$$x$$$ slime balls on cell $$$(0, 0)$$$.
- Move slime balls to next diagonal. For each cell, if the cell contains $$$k$$$ slime balls, $$$\lceil \frac{k}{2} \rceil$$$ moves to right and $$$\lfloor \frac{k}{2} \rfloor$$$ moves to down.
- Repeat the second step. If slime balls reached aimed diagonal, stop and find the result.

**Solution Code**

**Challenge**

Increase the conveyor size to $$$10^4 \times 10^4$$$. Solve this version. Query number is same.

Can someone explain/share the O(N) solution of task D2?

If $$$x \geq y$$$, follow D1. Otherwise, for $$$x < y$$$, observe that for each mismatch, we can fix it by either performing a single $$$y$$$ operation with another non-adjacent mismatch, or we can perform a sequence of $$$x$$$-operations to either the next or previous mismatch. We can use a 1D DP as follows:

$$$dp[i]$$$ represents the minimum cost for dealing with the first $$$i$$$ mismatches alone. If $$$i$$$ is even, then all mismatches should be fixed. If $$$i$$$ is odd, then $$$i - 1$$$ mismatches should be fixed while one mismatch remains. The $$$mis[]$$$ array stores mismatch indices.

For even $$$i$$$, $$$dp[i] = \min (dp[i - 2] + (mis[i] - mis[i - 1])x, dp[i - 1] + y)$$$. We can fix the $$$i$$$-th mismatch through either an $$$x$$$-operation chain with the $$$(i - 1)$$$-th mismatch (first option), or through a $$$y$$$-operation with some earlier mismatch (second option).

For odd $$$i$$$, $$$dp[i] = \min (dp[i - 2] + (mis[i] - mis[i - 1])x, dp[i - 1])$$$. Here, for the $$$i$$$-th mismatch, the first option is the same as before ($$$x$$$-operation chain with $$$(i - 1)$$$-th mismatch), but the second option is to let the $$$i$$$-th mismatch be the unresolved one. Note that $$$dp[i - 1] \leq dp[i - 2] + y$$$ (see even formula), so there is no need to consider using a $$$y$$$-operation for the $$$i$$$-th mismatch for odd $$$i$$$ (but it wouldn't change the result if this was added as a candidate).

The last element in the $$$dp$$$ array (which must be an even index) is the answer.

This is same as tourist solution.

This solution looks more elegant!

Very well explained, I understood it without trouble. This post should be in the editorial.

Better than the editorial. Thanks!

There is a solution with an $$$O(n)$$$ DP.

For $$$x\ge y$$$ the solution is obvious (it's Problem D1), so I'll assume that $$$x<y$$$ then.

First, pre-process $$$dif[i]$$$ which means the index of $$$i$$$-th difference between a and b.

Let $$$f[i]$$$ be the minimum cost to make first $$$i$$$ differences became same. It's impossible when $$$i$$$ isn't even, so if $$$i$$$ is odd, $$$f[i]$$$ becames the minimun cost to make that there's only one difference in the first $$$i$$$ differences.

Before we begin to solve, let $$$f[0]$$$ and $$$f[1]$$$ be $$$1$$$ first.

Then, we can calculate $$$f[i]$$$ for all $$$i$$$ from $$$2$$$ to $$$n$$$ in order:

If $$$i$$$ is even, $$$f[i]$$$ can be $$$f[i-2]+min(x\times(dif[i]-dif[i-1]),y)$$$. $$$f[i-2]$$$ means the cost when $$$dif[1\to i-2]$$$ are all solved, and $$$f[i]$$$ means the cost when $$$dif[1-i]$$$ are solved, so $$$f[i]$$$ need to add the cost to make $$$dif[i]$$$ and $$$dif[i-1]$$$ same.

$$$f[i]$$$ can also be $$$f[i-1]+y$$$. $$$f[i-1]$$$ means the cost when there's only one difference in $$$dif[1\to i-1]$$$, and $$$f[i]$$$ means there's no difference, so it has to add the cost to make $$$dif[i]$$$ and $$$dif[j]$$$ same. Although we don't know the real $$$j$$$, we know the cost is $$$y$$$, because the condition that $$$j=i-1$$$ has already solve by the last paragraph, so we can assume that $$$j<i-1$$$.

To sum up, the real $$$f[i]$$$ need to be the minimum cost between last two condition.

When $$$i$$$ is odd, the reasoning process is similar. $$$f[i]$$$ can be $$$f[i-2]+min(x\times(dif[i]-dif[i-1]),y)$$$, or $$$f[i-1]$$$. You can try to independently calculate.

Here is my code, you can refer to it.

Thanks for the explanation.

I have seen another tricky solution: We will exclude the x>=y as we can solve it with D1 solution and the case where only 2 nearby mismatches( ans=min(2*y,x) ),

(Option#1): So you will try to jump to any other mismatch with cost Y and goes to the next mismatch (dp[i] = dp[i+1] + y), I think this is valid because if you will take any mismatch with cost Y you will pair it with another mismatch.

The problem with option 1 is calculating Y for every mismatch, so you have to count the number of mismatches taken by the first option and divide them by 2 , to avoid that, you can just multiply the second option (x) by 2 and divide the final solution by 2.

(Option#2): The other transition is to chain with the next one(i+1) and transition to (i+2) so you solved i and i+1 mismatches with cost x*(mismatch[i+1] — mismatch[i+2]). option 2 is only valid if there exists (i+1<n). dp[i] = min(dp[i],dp[i+2] + x*(mismatch[i+1] — mismatch[i+2]))

solution credits to IsaacMoris

let v be the sorted vector of indices where a[i]!=b[i] (let size of v be vn) then the answer of the problem is f(0)

where, cost(i,j)=min(y,|v[i]-v[j]|*x)

f(vn-1)=y,f(cn-2)=cost(vn-1,vn-2)

f(i) = min(((vn-i)%2)*y + f(i+1),cost(i,i+1)+f(i+2))

was this blog in 'draft' for 2 years?

Yes.

Hello Guys! For D2 I had this solution 172748609, I also don't no the reason that why its true.Can any one hack or say the reason behind it?

First, we get all the positions which satisfy a!=b and save them in a new array C. Then we consider four positions which are adjacent in C. Let them be p1,p2,p3,p4 (p1<p2<p3<p4) . There is always min((p2-p1)*x,y)+min((p4-p3)*x,y)<=min((p3-p1)*x,y)+min((p4-p2)*x,y), which means that (p1,p3)+(p2,p4) can't be a part of answer. So you are right :)

Why do you say that a greedy solution does not work in D2. I think it's too bad that such tasks appear in the competition!

Edited the phrase more clearly.

LoL, what did u expect from the fifth problem?

I'm pretty sure the post was to be interpreted with a "/s", considering the "not so unusual" hint (as it was before 351F44 edited it).

Hello guys, would really appreciate a little help with the B question. I thought that if we can make a combination with the 2 values of x and y that sums up to length-1 then we will get the right answer(was not sure so just tried). So I ran binary search between 0 and length-1 to search for the number of players that had x wins to find the answer and then print the player x times, but I got WA. here is the code:https://codeforces.cc/contest/1733/submission/172718129 kindly guide me, thank you. EDIT:I found the error,it was a silly mistake in the printing part.THe code is working fine now. Code:https://codeforces.cc/contest/1733/submission/172869494

Binary search only works on monotonic searching space. Simple words, if x works either y > x or y < x should work. I am not sure how this problem is related to binary search. Maybe explain why you think binary search will do here.

thank you for replying.Actually as i said in the post,I worked on the logic that if i can find a value k such that (k*x)+((length-k)*y) can form length-1(as we will have total wins as length-1) then we will have an answer. So the value of k can range from 0 to length-1. therefore to find that k i used binary search. I know I many have made some mistakes,therefore any tips are appreciated. Thank you

Thanks a lot for your help. I had made a minor error in my code in the printing the other logic was correct. The solution do works correctly now. Code:https://codeforces.cc/contest/1733/submission/172869494

Take a look at Ticket 16198 from

CF Stressfor a counter example.This should help you figure out why binary search wouldn't work.

Thanks a lot for your help. the code had a minor error in the printing the other logic was correct. Here is the solution Code:https://codeforces.cc/contest/1733/submission/172869494

You got it!

Does anyone have a solution for D2 using DP with memoization?

You can check my solution: 172731715,

The main part:you can see my solution of D2 using recursion+memoizatoin: https://codeforces.cc/contest/1733/submission/172789187

Let us say we have a vector of mismatched indices. We will be picking from this vector in pairs.

In the DP, at any mismatched index, we have following options:

Here is my submission https://codeforces.cc/contest/1733/submission/172860412

https://codeforces.cc/blog/entry/83109?#comment-954815

In D2(editorial), how is it possible to have $$$i+1$$$ ones in the first $$$i$$$ elements of $$$c$$$?

i is correct. Now edited. Thanks for noticing me.

I think there is one more problem with it.

You recalculate dp for all $$$0 \le j \le i$$$, but in formulas where $$$c_i=1$$$ there is a condition $$$j=i+1$$$.

Edited, thanks. There was some mistake while translating 0-based MCS into 1-based editorial.

What would be the expected rating of the first 2 questions?

We estimated A as *800, B as *1000 or *1100. Let's wait.

and C?

I think *1500.

Are you sure? I normally can't solve 1500s but C and even D1 were pretty solvable for me

Same, I was guessing around 1300.

Well, standing says it can be easier than *1500. It is what I estimated before the contest, maybe real difficulty is more easier? :/

Yeah could be. Thank you for the contest tho! Great problems.

Great Problem E! Though its implementation isn't complicated, its idea is quite thought-provoking and requires insight. This is how CF problems must be. Truly nice problem!

If anyone feel that the editorial is too complex and you have solved longest palindromic subsequence or longest palindromic substring or https://codeforces.cc/contest/1728/problem/D

Then see my submission for problem D: https://codeforces.cc/contest/1733/submission/172855405

Very easy to understand and O(N*N) DP

O(N) DP solution using Memoization: https://codeforces.cc/contest/1733/submission/172865814

Idea is to calculate how much we can save if we take or don't take x. Then subtract it from max cost possible i.e; y*(n/2)-dp[n]

My code for problem D2 is giving Time Limit Exceeded at test case 3, Please help me in optimising my Approach, suggest me with this intution only, please help.

hats off...!!

Is the challenge for E solvable?

I don't know.

I think it's plausible. Consider the state of the conveyer after using exactly k slimes and look at each diagonal, regarding right arrow as 0 and down arrow as 1. For example, when k = 0, all conveyers have right arrows, so all diagonal's values are 0. When k = 1, all conveyers except the first row have right arrows, so all diagonal's values are 1.

As k increases,

1st diagonal's values are: 0, 1, 0, 1, ....

2nd diagonal's values are: 00, 01, 11, 10, 00, ...

3rd diagonal's values are: 000, 001, 011, 001, 101, 100, 110, 100, 000, ...

4th diagonal's values are: 0000, 0001, 0011, 0111, 0011, 0001, 0011, 0111, 1111, 1110, 1100, 1000, 1100, 1110, 1100, 1000, 0000, ...

It's not something I really proved, but it seems there's an obvious pattern here. I guess this pattern will allow us to find a path for k-th slime in O(N log k) for a N*N conveyer system.

I'm curious to know how to solve problem c challenge, any hints ?

A video editorial explaining the dp cases of D2 would be very helpful. Or maybe if someone can explain the cases here?

I think stress plays a lot of role during contests. I had a whole 1 hour and 22 mins. left to do problem C during contest but was not able to do it, today tried to upsolve it and solved it in 15 mins without looking at the editorial.

Please, share solution for Problem C challenge. Thanks.

You can always make the whole array equal to the last element of the array in n-1 steps.

First, apply the operation on the first and the last element. After this the first and the last element will become equal.

Now just iterate through the array starting from the second element:

Case 1. If the current element has the same parity as the last element apply operation to the current and the last element. This will make the current element equal to the last.

Case 2. Otherwise, apply the operation to the current and the previous element. This will make the current element equal to the previous. But we know that the previous element is already equal to the last because we already iterated through it, so this will make the current element equal to the last.

Oh! I see. So the editorial's solution of n-1 operations is the optimal solution. Thanks.

This is the same solution as the orginal solution , however he asked about the solution of the challenge which asks to find minimum number of operations Test Sample : 2, 1, 3 according to your solution will cost 2 operations while the minimum cost is 1 operation we can apply the operation on second and third elements

Difference between E's solution I submitted in last two minutes and the AC solution

Hello, 351F44 can you please tell in the question

D1 & D2, how you even have a intuition of starting with theXORsof both the binary strings a and b. At my last thought after so long I could only think of working on b trying making equalto a. But actually of no use because it's the same thing.So how you even got the intuition of working on XORs of both the strings??

It is one of the result of an observation. To do such observation, check if it can be transformed to be structurally identical.

There was an incorrect solution get accepted on D2 during the contest, and unfortunatly didn't get hacked. The idea was use range(or interval?) DP with some strange strategies to enumerate the decision. Code link

Hope to strengthen the data soon.

172746684 else cout << min((r — l) * x, y) << endl; isn't it redundant to check for the

minimum?any Recursive approach for D2?

A typoNow, find out which cell contains

climeball among the diagonal.Edited. Thanks!

For the problem E, is it possible to find out the periodicity of a particular roller in $$$O(1)$$$ time or precompute them after which we can simulate the process for the slime that arrived at $$$t-x-y$$$ in $$$O(x+y)$$$ ?

I don't have a concrete idea yet on how would one calculate the periodicity tho :( Any suggestions would be helpful! I feel one could exploit this to solve the challenge as well?

So I tried to print the pattern of the state of each roller form t = 1 till t = 50 and 0 represents

rightand 1 representsdownand in the beginning between`{1,0}`

and`{0,1}`

you see a good pattern. but in the diagonal`(x+y = 2)`

There doesn't seem to be a pattern that is being followed, but there seems to be some similarity in`{0,2}`

and`{2,0}`

perhaps but`{1,1}`

seems to show no similarity ? And when we try talking about the diagonal`(x+y = 3)`

I can't spot any good pattern. So I'm skeptical of being able to find a pattern in the periodicity although I'm almost certain that the states of all rollers are periodic in nature.Pattern in the state of each rollerAt E, I could think everything in time but the most important part, the simulation with x slime balls processes. How can I approach that process from the hints?

I wonder for D2, if we can just use DP to solve all the conditons? So if x>y, can we use DP instead of greedy algorithm? I try it, but got wrong answer.

if the problem C ask us that they want to minimize the number of operation , how we can solve it ?

Can anyone explain that in question B Rule of League, in sample test case 4 ans is 2 but it can also be 1 right. As this was stated there Each player has either won x games or y games in the championship. i can't understand it plz help.

yes , in test case 4 it can be 1 or 2 , both of them are correct . one of them won just one times and the second one won 0 times

173387621 I have tried it but they say its wrong this is my submission.

if(mi != 0) cout<<-1<<endl; but continue here to not complete after printing , you are wrong because you print extra -1 not because of whose the player

Thanks man that's a really rookie mistake.