Port 53

明日のための技術メモ

AtCoder ABC149

AtCoder ABC149解いた分だけまとめ。
今回はUnratedだったのでレートの更新なし。
B問題の場合分けが甘く、焦ってしまってA問題1完でした...
普通にいければCまで解けてたなーと反省。
Dは後ほど追記します。貪欲かDPで解けるらしいので。

目次

後ほど追加予定

A. Strings

問題文 f:id:saturn-glave:20191231125143p:plain 入力を受け取り、逆順で文字列結合するだけ。おしまい。

#coding:utf-8
s, t = map(str, input().split())
print(t+s)

B. Greedy Takahashi

問題文 f:id:saturn-glave:20191231125340p:plain

場合分けで爆死したのでここから後で解いたものを貼ります。
クッキーを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

問題文 f:id:saturn-glave:20191231125625p:plain

素数判定が必要になる問題。 入力から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

問題文 f:id:saturn-glave:20191231125903p:plain

後日追記します