AtCoder Beginner Contest 161 / Python


f:id:penyooo:20200112235130p:plain


  • 初学者です。( 2019 / 9 ~ 現在8ヵ月目 )
  • AtCoder の問題に Python で取り組んでいます。
  • ABC で4問目(茶か緑)まで解けることを目標にしています。

完全に独学なのでコードは酷いと思います。

AtCoder やってる方、お気軽にコメントください。





結果


f:id:penyooo:20200404233545p:plain

4問目解けぬ!!



これだともうほとんどレーティングが上がらない。





問題と解答と勉強


atcoder.jp

提出したコード
X, Y, Z = map(int, input().split())
 
print(Z, X, Y)









atcoder.jp

提出したコード
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")









atcoder.jp

提出したコード
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)



f:id:penyooo:20200404232827p:plain

上手いこと必要な箇所だけ作っていけるんねぇ。

どうやって思い付いとるんやろか。

これのベースになる考え方とかがあるんかもしらん。

どなたかご存知であれば教えてください。








atcoder.jp

貪欲法?





atcoder.jp