AtCoder Beginner Contest 160 / Python


f:id:penyooo:20200112235130p:plain


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

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

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





結果


f:id:penyooo:20200328233043p:plain

下がった!!



やはり難しい問題が解けないと厳しいとこまで来ているようで・・・

ちょっと微妙な行いをしたら即下がってしまう (゚Д゚;)



問題と解答と勉強


atcoder.jp

提出したコード
S = input()
 
if S[2] == S[3] and S[4] == S[5]:
    print("Yes")
else:
    print("No")


今回は1問目らしい1問目だった。







atcoder.jp

提出したコード
X = int(input())
 
print((X // 500) * 1000 + ((X % 500) // 5) * 5)


これも特に何もない。







atcoder.jp

提出したコード
import numpy as np
 
K, N = map(int, input().split())
A = list(map(int, input().split()))
 
b = np.array(A[1:] + [A[0] + K])
c = np.array(A)

print(K - max(b - c))


f:id:penyooo:20200329000515p:plain

隣合う2地点間の距離が最大になるところ以外のところが答え。

これが奇麗な解法かどうかわからないが、それなりにシンプルかと。








atcoder.jp


ここを失敗した。

これを最短経路問題なんだろうなと思って。

そこから最小全域木とかダイクストラ法とかを検索してしまい、

あー全くわからん、こりゃ無理だ、と諦めてしまったのだけど。

全然そんな問題じゃなかったようで、普通に考えれば良かったみたい。

4問目だから何か特殊なアルゴリズムだって思うじゃない。あぁーあ・・・

終わってから考えたやつ
N, X, Y = map(int,input().split())

ans = [0] * (N-1)

for i in range(1, N+1):
    for j in range(i+1, N+1):
        a = abs(X - i)
        b = abs(Y - j)
        c = abs(a + b + 1)
          
        ans[min(j-i-1, c-1)] += 1
          

for i in ans:
    print(i)


例:1~8で、3と6が繋がっている。
f:id:penyooo:20200329003922p:plain
X → Y を通るルート c。

f:id:penyooo:20200329004316p:plain
X → Y を通らないルート j - i。

のうち小さい方を取る。

これを1-2、1-3、1-4、1-5‥‥‥、6-7、6-8、7-8と繰り返す。



ちなみに i が X → Y ルートの内側にあるときは、それぞれこのようになる。
f:id:penyooo:20200329005011p:plain
f:id:penyooo:20200329005137p:plain
i 、j 共に X → Y ルートの内側にあるとき。
f:id:penyooo:20200329005416p:plain
f:id:penyooo:20200329005531p:plain



こんなんで良かったのか、終わってから考えたら普通に出来た。

N, X, Y = map(int,input().split())

ans = [0] * (N-1)

for i in range(1, N+1):
    for j in range(i+1, N+1):
        ans[min(j-i-1, abs(X - i)+abs(Y - j))] += 1
          
for i in ans:
    print(i)


まとめてこんな感じに書いている人の方が多いみたいなんだけど、

これって何してるかイマイチよくわからん感じよね。

この辺ってどうなんだろう、どっちでも良いんだろうけど、どっちが良いのだろうか。

何にせよ絶対解けたわぁ、問題の難易度判定力も重要だなぁ。

敗因は解けないと思い込んんだことだ。






atcoder.jp



何かこの5問目、出来そうな気がする。

ちょっと疲れたから今日じゃないけど、後で考えてみたい。

見た目より難しいんかな、5問目だしなぁ。








atcoder.jp


全方位木 dp

なんじゃそりゃ、諦めよう。