CCF 2018-2小明放課後Python解法100点
2604 ワード
CCF 2018-2小明放課後Python解法
タイトルの背景には、漢東省政法大学付属中学校がある光明区が最近、「知恵光明」という知恵都市プロジェクトを実施した.具体的には、交通分野では、「知恵の光明」端末を通じて、光明区のすべての信号がこの時の状態を見ることができる.明ちゃんの学校にも「知恵の光明」端末が設置されており、明ちゃんはこの端末から与えられた情報を利用して、学校が終わって家に帰る時間を試算したいと思っています.学校が終わると、明ちゃんは自分の家に帰るルートを計画し、各区間を通る時間を予測することができます.また、明ちゃんは学校に設置された「知恵の光」端末を通じて、出発時刻に道を通るすべての信号の指示状態を見た.明ちゃんが今度家に帰るのに必要な時間を計算してください.入力フォーマット入力の最初の行には、信号の設定を表す3つの正の整数r、y、gがスペースで区切られています.この3つの数はいずれも106を超えない.入力された2行目には、明ちゃんが全部で通った道路区間数と通りかかった信号の数を表す正の整数nが含まれています.次のn行は、各行にスペースで区切られた2つの整数k、tを含む.k=0は、道路を通過するのにt秒かかることを示し、ここでtは106を超えない.k=1、2、3の場合、それぞれ出発時刻を示し、ここでの信号状態は赤、黄、青であり、カウントダウン表示板に表示される数字はtであり、ここでtはそれぞれr、y、gを超えない.出力フォーマットは、今回の明ちゃんが学校から家に帰るのに費やした時間を示す数字を出力します.サンプル入力30 3 30 8 0 10 1 5 0 11 2 0 6 0 3 3 10 0 3サンプル出力46サンプルは、明ちゃんが最初のルートを通って、10秒かかります.最初の信号は赤信号で、まだ5秒残っています.明ちゃんが交差点に着いたとき、この信号はもう青になったので、直接通過するのを待つ必要はありません.次に2段目の道を通って、11秒かかります.2番目の信号は黄色で、あと2秒です.明ちゃんが交差点に着いたとき、この信号はもう赤信号になって、まだ11秒残っています.次に3、4段目の道を通って、9秒かかります.3番目の信号は出発時に信号で、まだ10秒残っています.明ちゃんが交差点に着いたとき、この信号はもう赤信号になって、あと2秒残っています.次は最後の道を通って、3秒かかります.合計10+11+11+9+2+3=46秒.評価例の規模と所定のいくつかの試験点は特殊な性質を有している:*最初の2つの試験点には信号ランプが存在しない.試験点の入力データ規模:*上位6試験点保証n≦103.*すべての試験点はn≦105を保証する.問題解決の考え方:使用時間timesを計算し、lightの時間を除いて現在のランプ数lightnumを得る.ライトnum-tが0より大きい場合、信号が変化したことを表し、赤緑黄に基づいてどのランプに変化したのか、さらに時間がかかったのかを判断します.逆に信号は変わりません.
AC
コードが乱れて最適化されていません
タイトルの背景には、漢東省政法大学付属中学校がある光明区が最近、「知恵光明」という知恵都市プロジェクトを実施した.具体的には、交通分野では、「知恵の光明」端末を通じて、光明区のすべての信号がこの時の状態を見ることができる.明ちゃんの学校にも「知恵の光明」端末が設置されており、明ちゃんはこの端末から与えられた情報を利用して、学校が終わって家に帰る時間を試算したいと思っています.学校が終わると、明ちゃんは自分の家に帰るルートを計画し、各区間を通る時間を予測することができます.また、明ちゃんは学校に設置された「知恵の光」端末を通じて、出発時刻に道を通るすべての信号の指示状態を見た.明ちゃんが今度家に帰るのに必要な時間を計算してください.入力フォーマット入力の最初の行には、信号の設定を表す3つの正の整数r、y、gがスペースで区切られています.この3つの数はいずれも106を超えない.入力された2行目には、明ちゃんが全部で通った道路区間数と通りかかった信号の数を表す正の整数nが含まれています.次のn行は、各行にスペースで区切られた2つの整数k、tを含む.k=0は、道路を通過するのにt秒かかることを示し、ここでtは106を超えない.k=1、2、3の場合、それぞれ出発時刻を示し、ここでの信号状態は赤、黄、青であり、カウントダウン表示板に表示される数字はtであり、ここでtはそれぞれr、y、gを超えない.出力フォーマットは、今回の明ちゃんが学校から家に帰るのに費やした時間を示す数字を出力します.サンプル入力30 3 30 8 0 10 1 5 0 11 2 0 6 0 3 3 10 0 3サンプル出力46サンプルは、明ちゃんが最初のルートを通って、10秒かかります.最初の信号は赤信号で、まだ5秒残っています.明ちゃんが交差点に着いたとき、この信号はもう青になったので、直接通過するのを待つ必要はありません.次に2段目の道を通って、11秒かかります.2番目の信号は黄色で、あと2秒です.明ちゃんが交差点に着いたとき、この信号はもう赤信号になって、まだ11秒残っています.次に3、4段目の道を通って、9秒かかります.3番目の信号は出発時に信号で、まだ10秒残っています.明ちゃんが交差点に着いたとき、この信号はもう赤信号になって、あと2秒残っています.次は最後の道を通って、3秒かかります.合計10+11+11+9+2+3=46秒.評価例の規模と所定のいくつかの試験点は特殊な性質を有している:*最初の2つの試験点には信号ランプが存在しない.試験点の入力データ規模:*上位6試験点保証n≦103.*すべての試験点はn≦105を保証する.問題解決の考え方:使用時間timesを計算し、lightの時間を除いて現在のランプ数lightnumを得る.ライトnum-tが0より大きい場合、信号が変化したことを表し、赤緑黄に基づいてどのランプに変化したのか、さらに時間がかかったのかを判断します.逆に信号は変わりません.
r,y,g=map(int,input().split())
light=r+y+g
n=int(input())
times=0
nowtime=0
for i in range(n):
k,t=map(int,input().split())
if k==0:
times+=t
elif k==1:
lightnum=times%light
lightnum=lightnum-t
if lightnum>=0 and lightnum<=g:#
times+=0
elif lightnum>g and lightnum<=y+g:#
times+=y+g-lightnum+r
elif lightnum>y+g :#
times+=r+y+g-lightnum
elif lightnum<0:#
times-=lightnum
elif k==2:
lightnum=times%light
lightnum=lightnum-t
if lightnum>=0 and lightnum<=r:#
times+=r-lightnum
elif lightnum>r and lightnum<=r+g:#
times+=0
elif lightnum>r+g :#
times+=r+y+g-lightnum+r
elif lightnum<0:#
times+=r-lightnum
elif k==3:
lightnum = times % light
lightnum = lightnum - t
if lightnum>=0 and lightnum<=y:#
times+=y-lightnum+r
elif lightnum>y and lightnum<=r+y:#
times+=r+y-lightnum
elif lightnum>r+y :#
times+=0
elif lightnum<0:
times+=0
lightnum+=0
print(times)
AC
コードが乱れて最適化されていません