AtCoder ABC178
2020-09-13(日)に行われたAtCoderBeginnerContest178の問題をA問題から順に考察も踏まえてまとめたものとなります.
前半ではABCまでの問題を扱います.
問題は引用して記載していますが,詳しくはコンテストページの方で確認してください.
コンテストページはこちら
公式解説PDF
A問題 Not
問題文
$0$以上$1$以下の整数$x$が与えられます。
$x$が$0$なら$1$を、$1$なら$0$を出力してください。
提出したとき,テストケースが複数あってビビりましたが,無事'AC'でした.
case02~09も必要なのだろうか.
x = int(input())
print(1 - x)
B問題 Product Max
問題文
整数$a,b,c,d$が与えられます。
$a \leq x \leq b, c \leq y \leq d$を満たす整数$x,y$について、$x×y$の最大値はいくつですか。
$x,y$が異符号しかとれない場合,最大値は$a×d$ または $c×b$.
$x,y$が同符号の場合,最大値は$a×c$ または $b×d$.
a, b, c, d = map(int, input().split())
print(max(a * c, b * d, a * d, c * b))
C問題 Ubiquity
問題文
長さ$N$の整数の列$A_1,A_2,…,A_N$であって以下の条件をすべて満たすものはいくつありますか。
・$0 \leq A_i \leq 9$
・$A_i=0$なる$i$が存在する。
・$A_i=9$なる$i$が存在する。
ただし、答えはとても大きくなる可能性があるので、$10^9+7$で割った余りを出力してください。
高校1年生の数Aの問題でした.
$A_i=0$なる$i$が存在する配列の集合を$B$,$A_i=9$なる$i$が存在する配列の集合を$C$とすると,
\begin{align}
n(B \cap C) = n(B) + n(C) - n(B \cup C)
\end{align}
で求められますが,このままでは計算が大変なので式変形を行うと,
\begin{align}
n(B \cap C) &= n(B) + n(C) - n(B \cup C) \\
&= n(U) - (n(\overline{B}) + n(\overline{C}) - n(\overline{B \cup C})) \\
&= n(U) - n(\overline{B}) - n(\overline{C}) + n(\overline{B} \cap \overline{C}) \\
\end{align}
となり,計算が簡単にできます.
$n(U) = 10^N$
$n(\overline{B}) = 9^N$
$n(\overline{C}) = 9^N$
$n(\overline{B} \cap \overline{C}) = 8^N$
n = int(input())
mod = 10**9 + 7
print((10**n - 9**n + 8**n - 9**n) % mod)
前半はここまでとなります.
最近は公式の解説がとても丁寧に記述してあったので,詳しい解法はそちらを参考にしてもらえたらと思います.
前半の最後まで読んでいただきありがとうございました.
後半はDE問題の解説となります.
後半に続く.