AtCoder Beginner Contest 149 / Python
今回簡単だったような気がする。
だがしかし!開始時間を間違えて遅刻したので3問しか解けなった。
くそぉ。
結果
採点機能の不具合で今回はレーティング無しになったらしい。
遅刻したときにこうなるとは運が良い。
1問めを解くのにめちゃくちゃ時間が掛かった人になっていたので下がるところだった。
問題と解答と勉強
提出したコード
S,T = input().split() print(T+S)
提出したコード
A,B,K = map(int,input().split()) a = 0 b = 0 if A-K >=0: a = A-K b = B elif B - (K-A) >=0: b = B - (K-A) print(a,b)
提出したコード
import math X = int(input()) ans = 0 while ans == 0: factor = 0 if X % 2 == 0 and X != 2: X +=1 continue for divisor in range(2, k//2): if X % divisor == 0: factor += 1 if factor == 0: ans =X X +=1 print(ans)
よくある素数判定のコードをwhileで1つ見つけるまで回しただけ。
時間でアウトかと思ったが普通に通った。
遅刻してなかったら解けたと思うんだけど。
終わってから考えたコード
N,K = map(int,input().split()) R,S,P = map(int,input().split()) T = list(input()) for i in range(N-K): if T[K+i] == T[i]: T[K+i] = 0 print(sum([T.count("r")*P, T.count("s")*R, T.count("p")*S]))
K回前と手が被って得点にならないところは、K回後に得点できる手を選べば良い。
例えばK回前がグーで、K回後がパーならばチョキを出すことになる。
このような手は必ず1種類以上存在するので何を出すかは考えなくても良い。
4問めで実行時間を気にする必要がなく特殊なアルゴリズムも要らないのは珍しい気がする。
いつもの5問めに比べると簡単だと思うが、時間内でここまで解くのは無理だろうなぁ。
全部解いている人は何でそんな速度で解き方が思い浮かぶのだろうか。
借り物のコード
import bisect def num_shakes(border): ret = 0 for i in range(N): if A[i] + A[-1] < border: continue rest = border - A[i] j = bisect.bisect_left(A, rest) ret += N - j return ret N,M = map(int,input().split()) A = list(map(int,input().split())) A.sort() sumA = [0] for i in range(N): sumA.append(sumA[-1] + A[i]) print(sumA) l,r = A[0]*2, A[-1]*2 + 1 while r - l > 1: p = (l + r)//2 if num_shakes(p) >= M: l = p else: r = p m = num_shakes(r) ans = l * (M-m) for i in range(N): if A[i] + A[-1] < r: continue rest = r - A[i] j = bisect.bisect_left(A, rest) ans += A[i] * (N - j) + (sumA[-1] - sumA[j]) print(ans)
あまり難しいことをせずに解いている。
atcoder.jp
やっぱり6問めはよくわからない。