こんにちは, Shinoryoです.
今回はAtCoder Beginner Contest 178を, Pythonで解いてみた結果を書き連ねていこうと思います.
AtCoder Beginner Contest 178 - AtCoder
AtCoder is a programming contest site for anyone from beginners to experts. We hold weekly programming contests online.
A - Not
print(1-int(input())) |
B - Product Max
最大になりうるのは
a, b, c, d = [int(x) for x in input().split()] | |
print(max(a*c, a*d, b*c, b*d)) |
C - Ubiquity
- 全ての整数列:
通り が存在しない整数列: 通り が存在しない整数列: 通り も も存在しない整数列: 通り
以上から, 求めるべき値は
Python3の場合は, とりあえず律儀にそれを求めても問題はないと思います.
N = int(input()) | |
print((10**N - 2*9**N + 8**N) % (10**9 + 7)) |
整数の値が必要以上に大きくならないように, 累乗の処理の中に
# 累乗したものをmodで除した剰余を求める関数を定義 | |
def ruijo(a, k): | |
ans = 1 | |
for _ in range(k): | |
ans *= a | |
# 掛け算を行うたびに剰余を求める処理を行う | |
ans %= mod | |
return ans | |
# 簡単のため, modに10**9 + 7を格納 | |
mod = 10**9 + 7 | |
# 入力 | |
N = int(input()) | |
# 出力 | |
print((ruijo(10,N) - 2*ruijo(9,N) + ruijo(8,N)) % mod) |
D - Redistribution
動的計画法(dynamic programming)で解くことを考えます.
- その整数自身(
) に対する整数列群(の右側)に を加えたもの( )
少し飛んで,
- その整数自身(
) に対する整数列群(の右側)に を加えたもの( , ) に対する整数列群(の右側)に を加えたもの( ) に対する整数列群(の右側)に を加えたもの( ) に対する整数列群(の右側)に を加えたもの( )
より一般的に
- その整数自身
に対する整数列群(の右側)に を加えたもの に対する整数列群(の右側)に を加えたもの- ……
に対する整数列群(の右側)に を加えたもの
したがって,
が成り立つことが分かります. ここで,
のようになり,
また, 漸化式
となります.
を得ることができます.
どちらの漸化式を用いても解くことができます.
まずは, 漸化式
def dp(n): | |
# 割る数を格納しておく | |
mod = 10**9 + 7 | |
# Sが3以上かそうでないかで場合分け | |
if n > 2: | |
# 3以上であれば漸化式を用いる | |
dp = [0] * (n+1) | |
# 初期値 | |
dp[0] = 1 | |
dp[1] = 0 | |
dp[2] = 0 | |
# 漸化式の計算 | |
for i in range(3, n+1): | |
for j in range(i - 2): | |
dp[i] += dp[j] % mod | |
# 出力 | |
return dp[n] % mod | |
else: | |
# 2以下であれば0を出力 | |
return 0 | |
# 入力と出力 | |
print(dp(int(input()))) |
そして, 漸化式
def dp(n): | |
# 割る数を格納しておく | |
mod = 10**9 + 7 | |
# Sが3以上かそうでないかで場合分け | |
if n > 2: | |
# 3以上であれば漸化式を用いる | |
dp = [0] * (n+1) | |
# 初期値 | |
dp[0] = 1 | |
dp[1] = 0 | |
dp[2] = 0 | |
# 漸化式の計算 | |
for i in range(3, n+1): | |
dp[i] = (dp[i-1] + dp[i-3]) % mod | |
# 出力 | |
return dp[n] | |
else: | |
# 2以下であれば0を出力 | |
return 0 | |
# 入力と出力 | |
print(dp(int(input()))) |
E以降
E以降は私の能力不足故に省略いたします.
参考にしたサイト等
- 「解説 - AtCoder Beginner Contest 178」
Editorial - AtCoder Beginner Contest 178
AtCoder is a programming contest site for anyone from beginners to experts. We hold weekly programming contests online.
- nkmk様の「Python3の整数int型に最大値はない(上限なし)」
Python3の整数int型に最大値はない(上限なし) | note.nkmk.me
Python2の整数型にはintとlongの2つの型があったが, Python3にはintしかない. Python3のintはPython2のlongに相当し, 最大値の上限はなく, メモリの許す限り大きな値を扱うことが可能. ここでは以下の内容について説明する. Python2の整数int型と長整数long型 Python3の整数int型浮動小数点数floatとの関係 浮動小数点数flo...
0 件のコメント:
コメントを投稿 (Please feel free to ask me about your questions! You can use Japanese or English in the comments.)