Codeforces Round #735 ABCD Solutions (Java/C++)

A. Cherry

Solution:

Obviously, we want the max value and min value as large as possible. So that the product can be as large as possible. At least one of $$max(a_{l},a_{l+1})\cdot min(a_{l},a_{l+1}) \geq max(a_{l},a_{l+1},a_{l+2})\cdot min(a_{l},a_{l+1},a_{l+2})$$and$$max(a_{l+1},a_{l+2})\cdot min(a_{l+1},a_{l+2}) \geq max(a_{l},a_{l+1},a_{l+2})\cdot min(a_{l},a_{l+1},a_{l+2})$$is established.

Because at least one of $max(a_{l},a_{l+1})=max(a_{l},a_{l+1},a_{l+2})$ and $max(a_{l+1},a_{l+2})=max(a_{l},a_{l+1},a_{l+2})$ is established.
And $min(a_{l},a_{l+1}) \geq min(a_{l},a_{l+1},a_{l+2})$ and $min(a_{l+1},a_{l+}) \geq min(a_{l},a_{l+1},a_{l+2})$ must be established at the same time.

So, only need to enumerate all the intervals of length 2.

Code:

Java

Submission #124215403 - Codeforces
Codeforces. Programming competitions and contests, programming community

C++

Submission #124383786 - Codeforces
Codeforces. Programming competitions and contests, programming community

B. Cobb

Solution:

Just enumerate any pair of the last 200 digits.

Consider the pair of last two items, the result is: $n\cdot (n-1)-k\cdot (a_n|a_{n-1})$. Easy to get $a_n|a_{n-1}<n$. Therefore, the minimum value of the result of the pair of the last two items is: $n\cdot (n-1)-100n=n^2-101n$. ($a_n|a_{n-1}<n$ is not rigorous)

Consider the pair of last item and n-100 item, the result is: $n\cdot (n-100)-k\cdot (a_n|a_{n-100})$. Ignore the value of $a_n$, the smallest possible value of $a_n|a_{n-100}$ is 0. Therefore, the maximum value of the result of the pair of the last two items is: $n\cdot (n-100)=n^2-100n$.

We found that the minimum value of $[n,n-1]$ is almost greater than the maximum value of $[n,n-100]$. So enumerating the last 200 digits is very reliable.

Code:

Java

Submission #124430509 - Codeforces
Codeforces. Programming competitions and contests, programming community

C++

Submission #124430578 - Codeforces
Codeforces. Programming competitions and contests, programming community

C. Mikasa

Solution:

First, if a number does not appear (assuming the number is x), there must be $x\oplus n> m$. And our task is to find the smallest x.

Let $x\oplus n = y$, we only need to enumerate the first binary bit greater than m bitwise.

For example n=69, m=696:

We enumerate the first position where Y is greater than 696 (the red part). The value behind this position can be any value(? part), as long as x is 0 in this position (green part). So we can find out that the result is 640.

The only possible exception is $m=(111...11)_2$. We only need to consider the case of $x=m\oplus (m+1)$ at the end.

Code:

Java

Submission #124433546 - Codeforces
Codeforces. Programming competitions and contests, programming community

C++

Submission #124433801 - Codeforces
Codeforces. Programming competitions and contests, programming community

D. Diane

Solution:

Considering the string "aaaaa", and considering all substrings, a appears 5 times, aa appears 4 times, aaa appears 3 times, aaaa appears 2 times, and aaaaa appears once. Therefore, only aa and aaaa do not meet the conditions.
Then Consider the string "aaaa". A appears 4 times, aa appears 3 times, aaa appears 2 times, and aaaa appears once.
So we can think that put these two together, a appears 9 times, aa appears 7 times, aaa appears 5 times, aaaa appears 3 times, and aaaaa appears 1 time.

So our idea is to put x a and x + 1 a to the final string. So we construct a string like aaabaaaa. If n is an odd number, we construct a string like aaabcaaaa.

Code:

Java

Submission #124435930 - Codeforces
Codeforces. Programming competitions and contests, programming community

C++

Submission #124436125 - Codeforces
Codeforces. Programming competitions and contests, programming community