AtCoder Beginner Contest 155 / Python


f:id:penyooo:20200112235130p:plain


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

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

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



さて、前回下がってしまったレーティングはどうなっただろうか。



結果


f:id:penyooo:20200218205246p:plain

地味な上昇を再開できた。

次回、茶色に行けたら良いな。

問題と解答と勉強


atcoder.jp

提出したコード
A, B, C = input().split()
 
if A == B == C:
    print("No")
else:
    if A == B or B == C or C == A:
        print("Yes")
    else:
        print("No")


なんかダサい。

A = set(map(int,input().split()))
if len(A) == 2:
    print("Yes")
else:
    print("No")


カッコいい。







atcoder.jp



提出したコード
N = int(input())
A_lst = list(map(int, input().split()))
 
res = "APPROVED"
 
for i in A_lst:
    if i % 2 == 0:
        if i%3!=0 and i%5!=0:
            res = "DENIED"
            break
        
print(res)


何故か若干悩んでもうた。








atcoder.jp



提出したコード
from collections import defaultdict
 
N = int(input())
dic = defaultdict(int)
 
for i in range(N):
    dic[input()] += 1
 
 
dic = sorted(dic.items(), key=lambda x:x[1], reverse=True)
 
ans = [dic[0][0]]
 
for i in range(1,len(dic)):
    if dic[i][1] == dic[0][1]:
        ans.append(dic[i][0])
    else:
        break
 
for i in sorted(ans):
    print(i)


最近覚えた defaultdict 使ってみた。

成長したわ、と思っていたが、
collections を使うなら Counter を使った方が良かったんね・・・。

ライブラリ、覚えきれん。

from collections import Counter
N = int(input())
count = Counter([ input() for _ in range(N)])
 
m = max(count.values())
 
ans = [a for a,b in count.items() if b == m]

ans.sort()
for S in ans:
    print(S)










atcoder.jp



今回の大問題はこいつ。

提出したコード(不正解になる)
import numpy as np
 
N, K = map(int,input().split())
a = list(map(int,input().split()))
A = np.array(a)
A_outer = np.outer(A, A)
A_triu = A_outer[np.triu_indices(N, k = 1)]
 
A_triu.sort()  
 
print(A_triu[K-1])


これが何で不正解になるかわからなくて。

計算上の勘違いで間違ってるのかと思ったがそうでもなく。

じゃあ何で不正解なんだ、と煮詰まっていたところ。

f:id:penyooo:20200218211533p:plain f:id:penyooo:20200218211618p:plain f:id:penyooo:20200218211644p:plain f:id:penyooo:20200218211721p:plain

Twitterでブツブツ言っていたのを見かけて、親切な方が教えてくださった。

メモリ・・・。全然わかっていない部分だ。

そりゃいくら自分で考えててもわからない訳だ。

np.outer にどのくらいの規模の数を入れたらどのくらいメモリを使うんだろうか。

わからん。



何にせよ、計算量を減らすという方向で考えるべきなのだろう。

計算量の求め方というのが雰囲気しか理解出来てないので、その辺も課題だ。



ちなみに、僕がやろうとしたことは。

A = [ 3 3 -4 -2]

np.outer でA同士の直積をとって。

[[ 9 9 -12 -6]
[ 9 9 -12 -6]
[-12 -12 16 8]
[ -6 -6 8 4]]

np.triu_indices で三角行列の対角線より上を取得。

[[ 9  -12 -6]
[   -12 -6]
[      8]
[       ]]

なかなか良いと思ったんだけど、
どうせ実行不能なら itertools で組み合わせを出しても同じって話だ。

そっちが時間でダメってことはわかっていたんだけど。

メモリかぁ・・・・。





今回はこれに四苦八苦していたので5、6問目は見ていない。






atcoder.jp



atcoder.jp