**Adiv2**

To solve the problem one could just store two arrays *hused*[*j*] and *vused*[*j*] sized *n* and filled with false initially. Then process intersections one by one from 1 to *n*, and if for *i*-th intersections both *hused*[*h*_{i}] and *vused*[*v*_{i}] are false, add *i* to answer and set both *hused*[*h*_{i}] and *vused*[*v*_{i}] with true meaning that *h*_{i}-th horizontal and *v*_{i}-th vertical roads are now asphalted, and skip asphalting the intersection roads otherwise.

Such solution has *O*(*n*^{2}) complexity.

Jury's solution: 13390628

**Bdiv2**

It is always optimal to pass all the computers in the row, starting from 1-st to *n*-th, then from *n*-th to first, then again from first to *n*-th, etc. and collecting the information parts as possible, while not all of them are collected.

Such way gives robot maximal use of every direction change. *O*(*n*^{2}) solution using this approach must have been passed system tests.

Jury's solution: 13390612

**Adiv1**

Let the answer be *a*_{1} ≤ *a*_{2} ≤ ... ≤ *a*_{n}. We will use the fact that *gcd*(*a*_{i}, *a*_{j}) ≤ *a*_{min(i, j)}.

It is true that *gcd*(*a*_{n}, *a*_{n}) = *a*_{n} ≥ *a*_{i} ≥ *gcd*(*a*_{i}, *a*_{j}) for every 1 ≤ *i*, *j* ≤ *n*. That means that *a*_{n} is equal to maximum element in the table. Let set *a*_{n} to maximal element in the table and delete it from table elements set. We've deleted *gcd*(*a*_{n}, *a*_{n}), so the set now contains all *gcd*(*a*_{i}, *a*_{j}), for every 1 ≤ *i*, *j* ≤ *n* and 1 ≤ *min*(*i*, *j*) ≤ *n* - 1.

By the last two inequalities *gcd*(*a*_{i}, *a*_{j}) ≤ *a*_{min(i, j)} ≤ *a*_{n - 1} = *gcd*(*a*_{n - 1}, *a*_{n - 1}). As soon as set contains *gcd*(*a*_{n - 1}, *a*_{n - 1}), the maximum element in current element set is equal to *a*_{n - 1}. As far as we already know *a*_{n}, let's delete the *gcd*(*a*_{n - 1}, *a*_{n - 1}), *gcd*(*a*_{n - 1}, *a*_{n}), *gcd*(*a*_{n}, *a*_{n - 1}) from the element set. Now set contains all the *gcd*(*a*_{i}, *a*_{j}), for every 1 ≤ *i*, *j* ≤ *n* and 1 ≤ *min*(*i*, *j*) ≤ *n* - 2.

We're repeating that operation for every *k* from *n* - 2 to 1, setting *a*_{k} to maximum element in the set and deleting the *gcd*(*a*_{k}, *a*_{k}), *gcd*(*a*_{i}, *a*_{k}), *gcd*(*a*_{k}, *a*_{i}) for every *k* < *i* ≤ *n* from the set.

One could prove correctness of this algorithm by mathematical induction. For performing deleting and getting maximum element operations one could use multiset or map structure, so solution has complexity .

Jury's solution: 13390679

**Bdiv1**

One could calculate matrix sized *n* × *n* *mt*[*i*][*j*] — the length of the longest non-decreasing subsequence in array *a*_{1}, *a*_{2}, ..., *a*_{n}, starting at element, greater-or-equal to *a*_{i} and ending strictly in *a*_{j} element with *j*-th index.

One could prove that if we have two matrices sized *n* × *n* *A*[*i*][*j*] (the answer for *a*_{1}, *a*_{2}, ..., *a*_{pn} starting at element, greater-or-equal to *a*_{i} and ending strictly in *a*_{j} element with *j*-th index inside last block (*a*_{(p - 1)n + 1}, ..., *a*_{pn}) and *B*[*i*][*j*] (the answer for *a*_{1}, *a*_{2}, ..., *a*_{qn} ), then the multiplication of this matrices in a way

will give the same matrix but for length *p* + *q*. As soon as such multiplication is associative, next we will use fast matrix exponentiation algorithm to calculate *M*[*i*][*j*] (the answer for *a*_{1}, *a*_{2}, ..., *a*_{nT}) — matrix *mt*[*i*][*j*] raised in power *T*. The answer is the maximum in matrix *M*. Such solution has complexity .

Jury's solution (with matrices): 13390660

There's an alternative solution. As soon as *a*_{1}, *a*_{2}, ..., *a*_{nT} contains maximum *n* distinct elements, it's any non-decreasing subsequence has a maximum of *n* - 1 increasing consequtive element pairs. Using that fact, one could calculate standard longest non-decreasing subsequence dynamic programming on first *n* array blocks (*a*_{1}, ..., *a*_{n2}) and longest non-decreasing subsequence DP on the last *n* array blocks (*a*_{nT - n + 1}, ..., *a*_{nT}). All other *T* - 2*n* blocks between them will make subsegment of consequtive equal elements in longest non-decreasing subsequence.

So, for fixed *a*_{i}, in which longest non-decreasing subsequence of length *p* on first *n* blocks array ends, and for fixed *a*_{j} ≥ *a*_{i}, in which longest non-decreasing subsequence of length *s* on last *n* blocks array starts, we must update the answer with *p* + (*T* - 2*n*)*count*(*a*_{i}) + *s*, where *count*(*x*) is the number of occurences of *x* in *a*_{1}, ..., *a*_{n} array. This gives us solution.

Jury's solution (with suffix and prefix): 13390666

**Cdiv1**

Let's fix *s* for every (*l*, *s*) pair. One could easily prove, that if subarray contains *a*_{i} element, than *a*_{i} must be greater-or-equal than *a*_{j} for every *j* such that . Let's use this idea and fix *g* = *gcd*(*n*, *s*) (it must be a divisor of *n*). To check if *a*_{i} can be in subarray with such constraints, let's for every 0 ≤ *r* < *g* calculate

.

It's true that every good subarray must consist of and only of . For finding all such subarrays we will use two pointers approach and for every good *a*_{i}, such that is not good we will find *a*_{j} such that are good and is not good. Let has *k* elements . Any it's subarray is superior, so it gives us arrays of length 1, 2, ..., *k* with count *k*, *k* - 1, ..., 1. As soon as sum of all *k* is not greater than *n*, we could just increase counts straightforward. There's a case when all *a*_{i} are good, in which we must do another increases. Next we must add to the answer only counts of length *x*, such that *gcd*(*x*, *n*) = *g*.

Solution described above has complexity *O*(*d*(*n*)*n*), where *d*(*n*) is the number of divisors of *n*.

Jury's solution: 13390645

**Ddiv1**

It is a common fact that for a prime *p* and integer *n* maximum α, such that *p*^{α}|*n*! is calculated as , where *p*^{w} ≤ *n* < *p*^{w + 1}. As soon as , the maximum α for is calculated as .

One could see, that if we consider numbers *n*, *k* and *n* - *k* in *p*-th based numeric system, rounded-down division by *p*^{x} means dropping last *x* digits of its *p*-th based representation. As soon as *k* + (*n* - *k*) = *n*, every *i*-th summand in α corresponds to carry in adding *k* to *n* - *k* in *p*-th numeric system from *i* - 1-th to *i*-th digit position and is to be 0 or 1.

First, let convert *A* given in statement from 10 to *p*-th numeric system. In case, if α is greater than number of digits in *A* in *p*-th numeric system, the answer is 0. Next we will calculate dynamic programming on *A* *p*-th based representation.

*dp*[*i*][*x*][*e*][*r*] — the answer for prefix of length *i* possible equal to prefix of *A* representation (indicator *e*), *x*-th power of *p* was already calculated, and there must be carry equal to *r* from current to previous position. One could calculate it by bruteforcing all of *p*^{2} variants of placing *i*-th digits in *n* and *k* according to *r* and *e* and *i*-th digit of *A*, and make a translation to next state. It can be avoided by noticing that the number of variants of placing digits is always a sum of arithmetic progression and can be calculated in *O*(1).

It's highly recommended to examine jury's solution with complexity *O*(|*A*|^{2} + |*A*|*min*(|*A*|, α)).

Jury's solution: 13390698

**Ediv1**

One could prove that the number of binary functions on 4 variables is equal to 2^{24}, and can be coded by storing a 2^{4}-bit binary mask, in which every bit is storing function value for corresponding variable set. It is true, that if *mask*_{f} and *mask*_{g} are correspond to functions *f*(*A*, *B*, *C*, *D*) and *g*(*A*, *B*, *C*, *D*), then function (*f*&g)(A, *B*, *C*, *D*) corresponds to *mask*_{f}&*mask*_{g} bitmask.

Now, we could parse expression given input into binary tree. I should notice that the number of non-list nodes of such tree is about . Now, let's calculate dynamic programming on every vertex *v* — *dp*[*v*][*mask*] is the number of ways to place symbols in expression in the way that subtree of vertex *v* will correspond to function representing by *mask*. For list nodes such dynamic is calculated pretty straightforward by considering all possible *mask* values and matching it with the variable. One could easily recalculate it for one node using calculated answers for left and right subtree in 4^{16} operations: *dp*[*v*][*lmask*|*rmask*] + = *dp*[*l*][*lmask*] * *dp*[*r*][*rmask*].

But all the task is how to make it faster. One could calculate *s*[*mask*], where *s*[*mask*] is equal to sum of all its submasks (the masks containing 1-bits only in positions where *mask* contains 1-bits) in 2^{4}·2^{24} operations using following code:

```
for (int mask = 0; mask < (1 << 16); ++mask) s[mask] = dp[x][mask];
for (int i = 0; i < 16; ++i)
for (int mask = 0; mask < (1 << 16); ++mask)
if (!(mask & (1 << i))) s[mask ^ (1 << i)] += s[mask];
```

Let's calculate *sl*[*mask*] and *sr*[*mask*] for *dp*[*l*][*mask*] and *dp*[*r*][*mask*] respectively. If we will find *s*[*mask*] = *sl*[*mask*] * *sr*[*mask*], *s*[*mask*] will contain multiplications of values of pairs of masks from left and right *dp*'s, which are submasks of *mask*. As soon as we need pairs, which in bitwise OR will give us exactly *mask*, we should exclude pairs, which in bitwise OR gives a submask of *mask*, not equal to *mask*. This gives us exclusion-inclusion principle idea. The formula of this will be

, where *p* is the parity of number of bits in *mask*^*submask*.

Such sum could be calculated with approach above, but subtracting instead of adding

```
for (int mask = 0; mask < (1 << 16); ++mask) s[mask] = sl[mask] * sr[mask];
for (int i = 0; i < 16; ++i)
for (int mask = 0; mask < (1 << 16); ++mask)
if (!(mask & (1 << i))) s[mask ^ (1 << i)] -= s[mask];
```

In such way we will recalculate dynamic for one vertex in about 3·2^{4}·2^{16} operations.

Jury's solution: 13390713