AtCoder Beginner Contest 128・169・185 AB問題
前書き
AtCoder Beginner Contest 128・169・185 AB問題を早解きしました。
B問題(AtCoder128)
- 難易度:灰
- 時間:13分
アルゴリズム自体はすぐに思いついて実装に取り掛かりました。
まずは点数のソート→市名のソートの順で処理していくと、お目当ての店順が得られます。
N = int(input()) lis = [] for n in range(1,N+1): S,P = map(str, input().split()) lis.append([S,int(P),n]) lis = sorted(lis, reverse=True, key=lambda x: x[1]) lis = sorted(lis, key=lambda x: x[0]) for l in lis: print(l[2])
B問題(AtCoder169)
- 難易度:灰(高)
- 時間:15分
オーバーフローを考えなくてはいけないので、全てを計算するわけにもいかず
与えられた数値から順に計算し、10**18を超えた時に-1を出力するようにします。
ただ 0に関しては、入力数値に存在しているだけで、出力は0なので、あらかじめ計算しておきます。
import sys N=int(input()) A=list(map(int,input().split())) _mul=1 if 0 in A: print(0) sys.exit() for j in range(N): _mul*=A[j] if _mul>1000000000000000000: print(-1) sys.exit() print(_mul)
B問題(AtCoder185)
- 難易度:灰
- 時間:16分
以下の留意点に注意した上でコードを書いていきました。
- 最初のカフェに移動途中、帰宅途中も充電は減少しています
- 充電が最大になった時、容量以上は増加しない
- カフェにいない移動時間は充電が減り続けている
import sys N,M,T = map(int,input().split()) AB = [list(map(int,input().split()))for n in range(M)] _max = N AB.insert(0,[0,0]) AB.append([T,T]) for i in range(1,M+2): N-=(AB[i][0]-AB[i-1][1]) if N<=0: print('No') sys.exit() N+=(AB[i][1]-AB[i][0]) if N>_max: N=_max print('Yes')