d_tail's blog

備忘や記録

【参加記録】AtCoder Beginner Contest 114

はじめに

AtCoder Beginner Contest 114に参加した記録です.

beta.atcoder.jp

A - 753

入力が7か5か3だったら'YES'を出力,そうでなければ'NO'を出力する.

N = int(input())

if N == 7 or N == 5 or N == 3:
    print('YES')
else:
    print('NO')

B - 754

文字列の先頭から順番に3つずつ取り出し,753との差の絶対値を比べていけば良い.
Pythonだと簡単.

S = list(input())

res = 753

for i in range(len(S)-2):
    X = ''
    for i in S[i:i+3]:
        X += i 
    X = int(X)
    tmp = abs(753-X)
    if tmp < res:
        res = tmp

print(res)

解説では2行で実装していました.

S = input()
print(min(abs(int(S[i:i+3]) - 753) for i in range(len(S) - 2)))

https://img.atcoder.jp/abc114/editorial.pdf

C - 755

(7,5,3)の3桁以上入力の桁数以下の直積集合(?)によって,解説における準七五三数を列挙して条件に合うものの数をカウント.
itertoolsが非常に便利でした.暇があったら使い方のまとめみたいなものを作りたい.
解説によると再帰関数で実装するのが素直な方法らしいです.

import itertools
import collections

N = input()

if int(N) < 100:
    print(0)
    exit()

product_list = []
for i in range(3,len(N)+1):
    product_list += list(itertools.product('753', repeat=i))

res = 0

for i in product_list:
    num = "".join(list(i))
    if int(N) < int(num):
        continue
    if num.count('5') > 0 and num.count('7') > 0 and num.count('3') > 0:
        res += 1

print(res)

D - 756

ググったら解けそうな気がしたけど,時間不足&結局方針も間違えていました.

コメント

ここ最近は競プロにあまり触れていなかったので,C問題が解けるか不安でしたが無事解くことができました.
そして今回のコンテストでレートが緑に到達しました.

f:id:d_tail:20181202235618p:plain

まだまだC問題も安定して解ける訳ではないので,できる限り陥落しないように精進したいです.