AtCoder ABC149
AtCoder ABC149解いた分だけまとめ。
今回はUnratedだったのでレートの更新なし。
B問題の場合分けが甘く、焦ってしまってA問題1完でした...
普通にいければCまで解けてたなーと反省。
Dは後ほど追記します。貪欲かDPで解けるらしいので。
目次
後ほど追加予定
A. Strings
問題文
入力を受け取り、逆順で文字列結合するだけ。おしまい。
#coding:utf-8 s, t = map(str, input().split()) print(t+s)
B. Greedy Takahashi
場合分けで爆死したのでここから後で解いたものを貼ります。
クッキーを1012枚食べたらしんでしまう...
基本的に高橋くんは自分のクッキーからひたすら食べていくので、
食べる回数と高橋くん・青木くんのクッキーの枚数との兼ね合いで場合分けをする。
- 高橋くんのクッキーが食べる回数以上ある
- 高橋くんのクッキーをすべて食べつくし、青木くんのクッキーが余る
- 高橋くんと青木くんのクッキーをすべて食べつくす
#coding:utf-8 a, b, k = map(int, input().split()) if k <= a: a = a - k elif a < k and k <= (a + b): b = b - (k - a) a = 0 elif (a + b) < k: a = 0 b = 0 print(a, b)
C. Next Prime
素数判定が必要になる問題。
入力から1ずつ加算して、最初に素数で引っかかったものを出力するだけ。
素数系はよく出るので、ライブラリとして持っておく。
ACしたコード
#coding:utf-8 import math #素数判定 def prime(n): if n == 2: return True elif (n < 2) or (n % 2 == 0): return False else: i = 3 while i <= math.sqrt(n): if n % i == 0: return False i += 2 return True if __name__ == "__main__": x = int(input()) num = x while prime(num) == False: num += 1 print(num)
TLEしたコード
おまけ。本番で出したやつ。
範囲分の素数を全部出してその中から探そうとしたらTLEで爆死。
#coding:utf-8 #これだとTLE import math import collections # 10^5の素数をすべて求める def prime(): prime = [2, 3] for i in range(5, 1000000, 2): flag = True for j in range(1, len(prime)): if prime[j] ** 2 > i: break if i % prime[j] == 0: flag = False break if flag: prime.append(i) return prime if __name__ == "__main__": x = int(input()) prime = prime() #print(prime) for num in prime: if int(num) >= x: print(num) break
D. Prediction and Restriction
後日追記します