こんにちは, Shinoryoです.
今回はAtCoder Beginner Contest 189を, Pythonで解いてみた結果を書き連ねていこうと思います.
AtCoder Beginner Contest 189 - AtCoder
AtCoder is a programming contest site for anyone from beginners to experts. We hold weekly programming contests online.
A - Slot
愚直に条件を確認します.
# 入力 | |
c = input() | |
# 一致判定 | |
if c[0] == c[1] and c[1] == c[2]: | |
print("Won") | |
else: | |
print("Lost") |
B - Alcoholic
お酒を
# 入力 | |
# アルコールの量は100倍にして整数の範囲で計算する | |
n, x = [int(x) for x in input().split()] | |
x *= 100 | |
# アルコール摂取量格納 | |
alc = 0 | |
# お酒を飲んでみる | |
for i in range(n): | |
v, p = [int(x) for x in input().split()] | |
alc += v * p | |
# 酔っ払っているか確認 | |
if alc > x: | |
print(i + 1) | |
exit() | |
# 酔っ払っていない場合 | |
print(-1) |
C - Mandarin Orange
全探索で計算することを考えます.
# 入力 | |
n = int(input()) | |
a = [int(x) for x in input().split()] | |
# 答えを格納 | |
ans = 0 | |
# 全探索するゾ | |
for l in range(n): | |
for r in range(l,n): | |
# xは可能な限り最大の値をとる | |
x = min(a[l:r+1]) | |
# ansを更新 | |
ans = max(ans, (r - l + 1)*x) | |
# 答えを出力 | |
print(ans) |
そこで, 固定された
# 入力 | |
n = int(input()) | |
a = [int(x) for x in input().split()] | |
# 答えを格納 | |
ans = 0 | |
# 全探索するゾ | |
for l in range(n): | |
# 最初(r = l)のxはa[l]に一致する | |
x = a[l] | |
for r in range(l,n): | |
# rが増えていくたびにxの更新が入る | |
x = min(x, a[r]) | |
# ansを更新 | |
ans = max(ans, (r - l + 1)*x) | |
# 答えを出力 | |
print(ans) |
PyPy3だとACできたので, これ以上は踏み込みません.
D - Logical Expression
簡単に,
が であるとすると, も も でなければなりません. よって, のみが当てはまります. が であるとすると, か のどちらかが であればよいです. よって, のみが当てはまります.
これを一般化します.
が であるとすると, も も でなければなりません. よって, は, が であるような変数列の数 に一致し, となります*3. が であるとすると, か のどちらかが であればよいです. すなわち, 以下の2パターンになります. が であるような変数列 に を付け加えたもの であるような任意の変数列
となります.
このようにすれば,
# dpdp! | |
def dpfunc(n,s): | |
dp = [0]*n | |
# N=1のときの初期値 | |
if s[0] == "AND": | |
dp[0] = 1 | |
else: | |
dp[0] = 3 | |
# 1つ前の値を用いて計算していく | |
for i in range(1,n): | |
if s[i] == "AND": | |
dp[i] = dp[i-1] | |
else: | |
dp[i] = dp[i-1] + 2**(i+1) | |
return dp[-1] | |
# 入力 | |
n = int(input()) | |
s = [input() for _ in range(n)] | |
# 答えを出力 | |
print(dpfunc(n,s)) |
E以降
E以降は私の能力不足故に省略いたします.
参考にしたサイト等
- 「解説 - AtCoder Beginner Contest 189」
Editorial - AtCoder Beginner Contest 189
AtCoder is a programming contest site for anyone from beginners to experts. We hold weekly programming contests online.
脚注
*1 :
*2 :
*3 : この場合,
0 件のコメント:
コメントを投稿 (Please feel free to ask me about your questions! You can use Japanese or English in the comments.)