まだ緑(ABC142)

ABC142のネタバレ含みます!

問題はこちら. atcoder.jp

A 入力以下の数の中の奇数の割合。何故か奇数の際につまづいて微妙に時間をロスってしまう。しかも解説で場合分けはいらんやでと言われ往復ビンタ.

N = int(input())
if N % 2 == 0:
  print(0.5)
else:
  print(0.5+(1/N)/2)

B めっちゃ素直なfor文。Aより速い説とか思って提出時間を見直すとほんまにAよりまあまあ速い。

N,K = map(int,input().split())
H = list(map(int,input().split()))
ans = 0
for i in H:
  if i >= K:
    ans += 1
print(ans)

C 辞書かなあと思ったがよく考えるとソートの必要がありそうなので大丈夫か?と思ったがそこでソートできるのがPythonの良いところ。考え直すとリストで良い気が。Twitterで見たんですけどAtCoderでは空白刻みで出力は改行で提出しても良いらしい.実際に開業出力でオッケーだったのでたぶん大丈夫.

N = int(input())
A = list(map(int,input().split()))
dict = {}
for i in range(N):
  dict[A[i]] = i+1
sA = sorted(dict.items())
ans = []
for i in range(N):
  ans.append(sA[i][1])
print(*ans)

D 公約数の中で互いに素なやつをいっぱい選べとのこと。例を見ると最大公約数が大きくても答えは結構小さそう。ということで最大公約数の素因数分解をして個数を見る方法を思いつく。1を追加すべきなのと、22とかでも2を取り出すしかないため、使っている種類のみを見ることに。そこから一悶着あるのがこの問題だと思うのですが、以下のサイトで高速素因数分解の結果を返してくれる自作関数を発見。

Pythonで高速素因数分解〜競プロ用〜 - Qiita

返してくる形式に合わせようと思っていたが、種類のみでオーケーなのでlen()でいった。コードテスト中にAとBが互いに素だと上手くいかないことに気づいたが、何も考えつかなかったので例外処理して終了。時間が気になったが結構大丈夫だった。PyPyだと標準解TLEがあんまりないのか?(文字列操作とかはPython苦手らしいのでダメかもしれない.あとループぶん回すのとかも遅いとのこと)

import fractions
A,B = map(int,input().split())
k = fractions.gcd(A,B)
if k == 1:
  print(1)
  quit()
def factorization(n):
    arr = []
    temp = n
    for i in range(2, int(-(-n**0.5//1))+1):
        if temp%i==0:
            cnt=0
            while temp%i==0:
                cnt+=1
                temp //= i
            arr.append([i, cnt])

    if temp!=1:
        arr.append([temp, 1])

    if arr==[]:
        arr.append([n, 1])

    return arr
print(len(factorization(k))+1)

E なんかよくわからんのでとばしたが、Fをやっているうちに動的計画法と気づいてEにしとけば良かったかと後悔.

F 全くわからん有向グラフ。しかし問題文を見たところグラフに詳しくなくても解けそうな感じがしたので着手。隣接グラフを書けるようになって少し嬉しかった。

総評 パフォーマンスは1157。やっぱり緑。5分ほど速くすれば水色パフォーマンスになったようだがそれよりEかFを解きにいったほうが良いと思った。速解きで頑張るのは勉強を終えてからにしたい。運が良ければあと2回ほどで緑になるかも。この2週間蟻本開いていないので精進します.

Nimメモはここに移動しましたー> qiita.com

Twitterアカウントはこれー> twitter.com