1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

AtCoder ABC 178 Python (A~E)

Posted at

総括

AとBしか解けず。
自分の解けなさに愕然としつつ、淡々と問題をこなしていくしかないです。
今回は数学回(?)でした。

#問題
https://atcoder.jp/contests/abc178

A. Not

image.png

回答

x = int(input())

if x == 0:
    print(1)
else:
    print(0)

いろいろな書き方があると思いますが、素直にif文で書きました。

B. Product Max

image.png

回答

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

image.png

回答(後日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)

喉元まで答えが出かかっていたのですが、なぜか回答を導き出せず。
普通に数えあげることはできないので、全体から引き算を行うことで算定します。
下記イメージ図。
image.png

D. Redistribution

image.png

回答(後日)


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

image.png

回答(後日)

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の式変形は勉強になりました。

1
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
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?