AtCoder ABC114 参加メモ
最近AtCoderに参加し始めました!まだまだ弱いので目も当てられないRatingが続いていますが,備忘録的に書きます.
AtCoder始めるまで,統計でRやPython,気が向いてc++やJSにちょっと触ったことあるぐらいでしたので,競プロ耐性はほぼゼロです.
AtCoderには,Rの次に慣れているPythonで参加しています.
過去問解いたり,蟻本読んだりして少しずつ勉強進めていますが,現状C問題が解けるか解けないかという間をさまよっています.
A問題
わかる.
B問題
珍しく簡単
s = input() res = abs(753 - int(s[0:3])) for i in range(1,len(s)-2): if res > abs(753 - int(s[i:i+3])): res = abs(753 - int(s[i:i+3])) print(res)
C問題
時間内に解けませんでした.単純にfor文回したらだめで,どういう方針で解くか悩んでいるうちに時間切れ.終わってから解説読み,一晩寝かして考えたら解けました.
- とりあえず可能性のある数字を全部列挙する
- 列挙するにあたり,まずは7,5,3のいずれかで構成される数字を列挙する.(7だけとか3だけもOK)
- 列挙したものの中から,条件を満たす要素数を数える
#---------------- # 入力パート s = input() #---------------- #---------------- # 列挙パート all_list = [] # 3桁未満はありえないので3桁の数を列挙 for i in '753': for j in '753': for k in '753': all_list.append(''.join([i,j,k])) # 与えられた数字の桁数まで,既に列挙してあるものの先頭に7,5,3を付け足していく for i in range(4,len(s)+1): add_list = [] for c in '753': add_list += [''.join(c+e) for e in all_list] all_list += add_list # 重複を排除する all_list = set(all_list) #---------------- #---------------- # 回答パート # 各要素を集合に変換して{'7','5','3'}と同じになり,かつ与えられた数以下であるかを判定し合計する res = sum([True for _ in all_list if set(list(_))=={'7','5','3'} and int(_) <= int(s)]) print(res) #----------------
競技プログラミングにもっと早く出会いたかった.