AtCoder ABC 178 Python (A~E)

총괄



A와 B밖에 풀리지 않는다.
자신의 풀림에 유연하게 하면서, 담담하게 문제를 해내 갈 수밖에 없습니다.
이번은 수학회(?)였습니다.

문제



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의 식변형은 공부가 되었습니다.

좋은 웹페이지 즐겨찾기