AtCoder Beginner Contest 128・169・185 AB問題

前書き

AtCoder Beginner Contest 128・169・185 AB問題を早解きしました。

A問題(AtCoder128)

  • 難易度:灰
  • 時間:3分

atcoder.jp

A,P=map(int,input().split())
print((A*3+P)//2)

B問題(AtCoder128)

atcoder.jp

  • 難易度:灰
  • 時間: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])

A問題(AtCoder169)

  • 難易度:灰
  • 時間:1分

atcoder.jp

A,B=map(int,input().split())
print(A*B)

B問題(AtCoder169)

  • 難易度:灰(高)
  • 時間:15分

atcoder.jp

オーバーフローを考えなくてはいけないので、全てを計算するわけにもいかず
与えられた数値から順に計算し、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)

A問題(AtCoder185)

  • 難易度:灰
  • 時間:1分

atcoder.jp

A = map(int,input().split())
print(min(A))

B問題(AtCoder185)

  • 難易度:灰
  • 時間:16分

atcoder.jp

以下の留意点に注意した上でコードを書いていきました。

  • 最初のカフェに移動途中、帰宅途中も充電は減少しています
  • 充電が最大になった時、容量以上は増加しない
  • カフェにいない移動時間は充電が減り続けている
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')