ABC033-B - 町の合併 を解く
ABC033-B - 町の合併
文字列 s と 数字 p の組み合わせが N 個与えられる
その中で数字 p の合計の過半数以上のものが存在するならば
その組み合わせの s を出力、存在しないならば 'atcoder' と出力する問題
もし、過半数以上の数字 p が存在するならば
それは最大値になるはずである
なぜなら、過半数以上の数字が2つ以上あったならば、合計を超えてしまうため
2つ以上存在することはありえない
ということで、文字列 s と 数字 p を順番にリストに追加していく際に
最大値を求めておき、最後にその最大値が過半数以上であれば
対応する文字列を出力、そうでなければ 'atcoder' を出力する、という方針でいく
提出したコード
# 入力 N=int(input()) sl=[] pl=[] # 町1つ目 s,p=map(str,input().split()) p=int(p) sl.append(s) pl.append(p) # 最高値を保存する変数(初期値は一つ目を代入) mx=p for i in range(N-1): s,p=map(str,input().split()) p=int(p) sl.append(s) pl.append(p) # 最高値を更新 mx=max(mx,p) # 最高値が過半数を超えていたらそれに対応する名称を出力 if mx>sum(pl)/2: print(sl[pl.index(mx)]) # そうでない場合は'atcoder'を出力 else: print('atcoder')
入力が "文字列" "数字" の形式であるため、一度どちらも str 型で受け取り
数字の方は int でキャストしている
文字列はリストsl に追加、数字はリスト pl に追加しており、
それぞれ順番も一致しているので、sl [ pl.index( mx ) ] と書くことで
最大値 mx に対応した 文字列 s を取り出すことができる
ここで、 index( ) というのは リストがもつメソッドであり、
引数にとった値(ここでは mx のこと)がある場所の添字を返してくれる