LoginSignup
0
1

More than 3 years have passed since last update.

AtCoderBeginnerContest178復習&まとめ(前半)

Last updated at Posted at 2020-09-14

AtCoder ABC178

2020-09-13(日)に行われたAtCoderBeginnerContest178の問題をA問題から順に考察も踏まえてまとめたものとなります.
前半ではABCまでの問題を扱います.
問題は引用して記載していますが,詳しくはコンテストページの方で確認してください.
コンテストページはこちら
公式解説PDF

A問題 Not

問題文
$0$以上$1$以下の整数$x$が与えられます。
$x$が$0$なら$1$を、$1$なら$0$を出力してください。

提出したとき,テストケースが複数あってビビりましたが,無事'AC'でした.
case02~09も必要なのだろうか.

abc178a.py
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$.

abc178b.py
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$

abc178c.py
n = int(input())
mod = 10**9 + 7
print((10**n - 9**n + 8**n - 9**n) % mod)

前半はここまでとなります.
最近は公式の解説がとても丁寧に記述してあったので,詳しい解法はそちらを参考にしてもらえたらと思います.
前半の最後まで読んでいただきありがとうございました.

後半はDE問題の解説となります.
後半に続く

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1