AtCoder Beginner Contest 161 / Python
結果
4問目解けぬ!!
これだともうほとんどレーティングが上がらない。
問題と解答と勉強
提出したコード
X, Y, Z = map(int, input().split()) print(Z, X, Y)
提出したコード
N, M = map(int, input().split()) A = list(map(int, input().split())) count = 0 for i in A: if i >= sum(A) / (4*M): count += 1 if count >= M: print("Yes") else: print("No")
提出したコード
N, K = map(int, input().split()) if N > K: if N % K > K / 2: print(K - (N % K)) else: print(N % K) else: if N > K / 2: print(K - N) else: print(N)
地道に場合分けをしてやってみたんだけど、
プロが書くとこうなるようだ。
N, K = map(int, input().split()) print(min(N%K, abs(N%K - K)))
う~ん、マンダム
こういうのをササっと書けないと問3タイムアタックも厳しい。
でも4問目を解けるようになるよりは、出来るようになる感じはある。
atcoder.jp
わからんかった。
やろうとしていることはわかるが、どうやってやるかサッパリ。
import numpy as np n = 1234 N = np.array([int(i) for i in str(n)]) if np.all(np.diff(N)<2): print("OK")
こんな感じで2項間の差の確認は出来ると思うけど、
これを1から順番に回していては時間が足りる訳がない。
じゃあどうすれば良いのか。
それが、わからん。
from collections import deque K = int(input()) q = deque([i for i in range(1, 10)]) for _ in range(K): x = q.popleft() y = x % 10 if y > 0: q.append(10 * x + y - 1) q.append(x * 10 + y) if y < 9: q.append(10 * x + y + 1) print(x)
上手いこと必要な箇所だけ作っていけるんねぇ。
どうやって思い付いとるんやろか。
これのベースになる考え方とかがあるんかもしらん。
どなたかご存知であれば教えてください。
atcoder.jp
貪欲法?
atcoder.jp