BOJ 2852 NBAバスケットボール
1360 ワード
2852号:NBAバスケットボール
1、2チームにはそれぞれ得点時間があり、各チームがリードする総時間がmm:ssの形で出力される問題.
xチームがリードしている場合、xチームが得点した場合は処理しなくてもよい.同点->リードまたはリード->同点の状況を処理すればよい.不必要な質問の繰り返しを避けるため、各チームの点数、リード開始時間、総リード時間をディックシャーナに保存する.
コア・ソリューションは次のとおりです.
1)同点から特定のチームがリードするようになればリード開始時間を加えて状態をリードするチームとする.
2)リードしている場合、同点であれば、累積和(入力された得点時間)-(記録されたリード開始時間)に基づき、状態を同点に変換する.
3)入力が終わった後、あるチームがまだリードしている場合、そのチームは累計(全試合時間)-(記録のリード開始時間)を加算する.
mm:ss形式ですが、不要な計算を減らすために秒単位で計算し、出力時のみ演算変換で出力します.
mm:ss形式の出力はformatを用いて0に空席を埋め,{:0>2}に処理する.
1、2チームにはそれぞれ得点時間があり、各チームがリードする総時間がmm:ssの形で出力される問題.
import sys
input = sys.stdin.readline
n = int(input())
score = {1: 0, 2: 0}
time = {1: 0, 2: 0}
ans = {1: 0, 2: 0}
state = 0 # 0 even, 1 team1 leads, 2 team2 leads
for _ in range(n):
team, t = input().split()
team = int(team)
m, s = map(int, t.split(':'))
t = m*60+s
score[team] += 1
if state == 0:
time[team] = t
state = team
elif state != 0 and score[1] == score[2]:
ans[state] += t-time[state]
state = 0
if state != 0:
ans[state] += 60*48-time[state]
print('{:0>2}:{:0>2}'.format(ans[1]//60, ans[1] % 60))
print('{:0>2}:{:0>2}'.format(ans[2]//60, ans[2] % 60))
stateを変数として同点、1チームリード、2チームリードの状態を記す.xチームがリードしている場合、xチームが得点した場合は処理しなくてもよい.同点->リードまたはリード->同点の状況を処理すればよい.不必要な質問の繰り返しを避けるため、各チームの点数、リード開始時間、総リード時間をディックシャーナに保存する.
コア・ソリューションは次のとおりです.
1)同点から特定のチームがリードするようになればリード開始時間を加えて状態をリードするチームとする.
2)リードしている場合、同点であれば、累積和(入力された得点時間)-(記録されたリード開始時間)に基づき、状態を同点に変換する.
3)入力が終わった後、あるチームがまだリードしている場合、そのチームは累計(全試合時間)-(記録のリード開始時間)を加算する.
mm:ss形式ですが、不要な計算を減らすために秒単位で計算し、出力時のみ演算変換で出力します.
mm:ss形式の出力はformatを用いて0に空席を埋め,{:0>2}に処理する.
Reference
この問題について(BOJ 2852 NBAバスケットボール), 我々は、より多くの情報をここで見つけました https://velog.io/@shin421179/BOJ-2852-NBA-농구テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol