AtCoder Beginner Contest 155 / Python
さて、前回下がってしまったレーティングはどうなっただろうか。
結果
地味な上昇を再開できた。
次回、茶色に行けたら良いな。
問題と解答と勉強
提出したコード
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")
カッコいい。
提出したコード
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)
何故か若干悩んでもうた。
提出したコード
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)
今回の大問題はこいつ。
提出したコード(不正解になる)
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])
これが何で不正解になるかわからなくて。
計算上の勘違いで間違ってるのかと思ったがそうでもなく。
じゃあ何で不正解なんだ、と煮詰まっていたところ。
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問目は見ていない。