AtCoder Beginner Contest 172

Updated:

AtCoder Beginner Contest 172

Source codes

Solutions

A - Calc

Flush $a + a ^ 2 + a ^ 3$.

B - Minor Change

Let $N$ be the length of $S$ or $T$. For $i = 0, \dots, N - 1$, if $S[i] = T[i]$, increment the count. Flush the result.

C - Tsundoku

Assume $0$-indexed. This is not a greedy simulation problem, but a cumulated sum problem.

Let $sumA$ and $sumB$ be the cumulated sum of $A$ and $B$, respectively. For $i = 0, \dots, N$, let $L = K - sumA[i]$. If $L < 0$, continue. Let $j = $ upper_bound(sumB.begin(), sumB.end(), L) - sum.begin() $- 1$. Here, $i + j$ is a possible number of books we can read. This is valid because $sumB$ is strictly increasing since $B _ i > 0$.

D - Sum of Divisors

Solution #1: $O(N \log N)$

Let $cnt[i] = $ be the number of divisors of $i$. We can obtain the result in the same way of Sieve of Eratosthenes. Then, calculate $\sum _ {i = 1} ^ N i \times cnt[i]$. The time complexity is $O(N \log N)$.

Solution #2: $O(N)$

This problem can be directly implemented as follows.

  ll ans{0};
  for (auto i{1}; i <= N; ++i)
  {
    for (auto j{1}; j <= N; ++j)
    {
      if (i % j == 0)
      {
        ans += i;
      }
    }
  }
  return ans;

We can swap the loop. If we swap $i$’s loop and $j$’s loop, we see that this problem is equivalent to the task that for each $j = 1, \dots, N$, we add up the sum $j, 2j, \dots, (N / j) * j$. This sum is calculated as follows. \[ j \times \frac{(N / j) ((N / j) + 1)}{2}. \] Hence, the total complexity is $O(N)$.

E - NEQ

Assume $0$-indexed.

Solution

This is an inclusive-exclusive principle problem.

The second condition is equivalent to that we don’t use each number more than twice. If $M < N$, the answer is $0$.

For $x \subset N$, we think of the number of placement for $(A, B)$ where it holds that $A _ i = B _ i$ for $i \in x$ (It may or may not hold $A _ i \neq B _ i$ for each $i \in N \setminus x$). This number is effected only by $\lvert x \rvert$. Thus, let $K = 0, \dots, N$ and let $f(K)$ be the number of placement for $(A, B)$ with this condition. The answer is \[ \sum _ {K = 0} ^ N (-1) ^ K \begin{pmatrix} N \\ K \end{pmatrix} f(K). \]

We choose $K$ elements from $N$ for the $i \in N$ with $A _ i = B _ i$. We choose $K$ numbers from $M$ for $A _ i = B _ i$. This is $M! / (M - K)!$. From the remaining elements, we choose $(N - K)$ elements for $A$ and $B$ independently. This is $((M - K)! / (M - N)!) ^ 2$. Then, we have \[ f(K) = \frac{M!}{(M - K)!} \left( \frac{(M - K)!}{(M - N)!} \right) ^ 2. \]

F - Unfair Nim

Solution

Let $A’ = A _ 1$, $B’ = A _ 2$ and $C = \bigoplus _ {i = 3} ^ N A _ i$. Let $A$ and $B$ be the results. Let $S = A’ + B’$. The condition is \[ \begin{align} A + B &= S, \tag{F.1} \\
A \oplus B &= C, \tag{F.2} \\
0 < A &\leq A’. \tag{F.3} \end{align} \] Here $A + B = A \oplus B + 2 (A \land B)$. Letting $D = (S - C) / 2$, we see that (F.1) is equivalent to the following condition. \[ A \land B = D. \tag{F.4} \] Of course, we have to check $S - C \geq 0$ and $(S - C) \% 2 = 0$ before that.

To consider (F.2) and (F.4), we think of $a \oplus b$ and $a \land b$ with $0 \leq a, b \leq 1$ as follows.

$(a, b)$ $a \oplus b$ $a \land b$
$(0, 0)$ $0$ $0$
$(1, 0)$ $1$ $0$
$(0, 1)$ $1$ $0$
$(1, 1)$ $0$ $1$

There is no possibility for $(a, b)$ with $a \oplus b = a \land b = 1$. Therefore, if $C \land D \neq 0$, the answer is negative. Hereinafter, assume $C \land D = 0$. Then, for each $i$ with $D[i] = 1$, we must have $A[i] = 1$. For each $i$ with $C[i] = 1$, we have choice that we let $A[i] = 0$ or $1$. Thus, temporality, we let $A = D$.

We maximize $A$ with (F.3). We apply a greedy algorithm for this. We try $i$ with $C[i] = 1$ in descending order. If $A + (C[i] \mathbin{< <} i) \leq K$, we execute $A \gets A + (C[i] \mathbin{< <} i)$. Finally, we confirm (F.3) and flush $A’ - A$.

Others