総括
AとBしか解けず。
自分の解けなさに愕然としつつ、淡々と問題をこなしていくしかないです。
今回は数学回(?)でした。
#問題
https://atcoder.jp/contests/abc178
A. Not
回答
x = int(input())
if x == 0:
print(1)
else:
print(0)
いろいろな書き方があると思いますが、素直にif文で書きました。
B. Product Max
回答
a, b, c, d = map(int, input().split())
answer = 0
if a < 0 and 0 <= b:
if c < 0 and 0 <= d:
answer = max(a * c, b * d)
elif 0 <= c and 0 <= d:
answer = b * d
elif c < 0 and d < 0:
answer = a * c
elif 0 <= a and 0 <= b:
if c < 0 and 0 <= d:
answer = b * d
elif 0 <= c and 0 <= d:
answer = b * d
elif c < 0 and d < 0:
answer = a * d
elif a < 0 and b < 0:
if c < 0 and 0 <= d:
answer = a * c
elif 0 <= c and 0 <= d:
answer = b * c
elif c < 0 and d < 0:
answer = a * c
print(answer)
if文を書いている途中で、「maxとればいけるな・・・」と思いながらも、引き返さずに全場合分けを書ききりました。
こんなに場合わけしなくても下記のようにmaxで解けば終わりです。
a, b, c, d = map(int, input().split())
answer = max(a*c, a*d, b*c, b*d)
print(answer)
C. Ubiquity
回答(後日AC)
MOD = 10**9 + 7
N = int(input())
# 少なくとも0がはいる
in0 = 10**N - 9**N
# 少なくとも0がはいる
in9 = 10**N - 9**Nu
# 0または9がはいる
0and9 = 10**N - 8**N
answer = in0 + in9 - 0and9
print(answer%MOD)
喉元まで答えが出かかっていたのですが、なぜか回答を導き出せず。
普通に数えあげることはできないので、全体から引き算を行うことで算定します。
下記イメージ図。
D. Redistribution
回答(後日)
MOD = 10**9 + 7
S = int(input())
dp = [0] * (S+1)
dp[0] = 1
for i in range(1, S+1):
for j in range(0, (i-3)+1):
dp[i] += dp[j]
dp[i] %= MOD
print(dp[S])
snukeさんの回答そのまま。
DP
だなとわかったところまでしかわからず。
解説みれば、「確かにね」とわかるものの、実際に制限時間内に解けと言われるとDP
は解けないです。
修業が足りない・・・。
E. Dist Max
回答(後日)
N = int(input())
a, b = [], []
for i in range(N):
x, y = map(int, input().split())
a.append(x+y)
b.append(x-y)
a.sort()
b.sort()
answer = max(a[-1] - a[0], b[-1] - b[0])
print(answer)
これまた、snukeさんの回答そのまま。
maxの式変形は勉強になりました。