AtCoder ABC150
AtCoder ABC150解いた分だけまとめ。
今回はピアノ発表会の前日で睡眠を優先したため参加せず、後で解きました。
結局問題不備でUnratedになったらしいですね...運営の皆様お疲れ様です...汗
C問題で全探索が出たので、next permutationをキメた。
目次
A. 500 Yen Coins
単純に500円×枚数を計算してx円以上かそれ未満かで出力変えるだけ。おしまい。
#coding:utf-8 k, x = map(int, input().split()) if k * 500 >= x: print('Yes') else: print('No')
B. Count ABC
文章sについて、1文字目から最後より3つ手前の文字まで、
順番にそこから3文字分を取り出してABC
が何回出るか数えるだけ。
地味にスライスする時・for文で回す時に開始と終了の位置ずれを起こしがちなので、
慣れないうちはprintデバッグが欠かせない。
#coding:utf-8 n = int(input()) s = input() count = 0 for i in range(0, n-2): #print(s[i:i+3]) if s[i:i+3] == 'ABC': count += 1 print(count)
C. Count Order
ここは難しいので解説ACで。
全探索ですべての組み合わせを出し、若い順に並べ替えておく。
p, qがその何番目にいるかを求めたら、その絶対値を求めて終了。
ポイント
1. 全探索に使うライブラリ
全探索をPythonでする時は、itertools.permutations
を使う。
C++で言う、next permutation
に相当するもの。
すべての順列を出力してくれる。リストに結果を入れるとタプルのリストになった。
2. タプルを入力に取る
tuple(map(int, input().split()))
のようにできる。
3. リストやタプルの要素のインデックスを求める
list.index(item)
とすると要素itemのインデックスが返ってくる。タプルも同じ。
ACしたコード
#coding:utf-8 #全探索 import itertools n = int(input()) #permutationすると各結果がタプルで返るので入力をタプルにする p = tuple(map(int, input().split())) q = tuple(map(int, input().split())) #全部の並べ替えパターンを列挙,ついでにソートしておく pattern = sorted(list(itertools.permutations(p))) #print(pattern) print(abs(pattern.index(p) - pattern.index(q)))