#C - Distribution
ABC214C問題では、
条件は
・N人が円周上に並んでいる
・円周上の人は時刻Tに宝石をもらう
・宝石をもらってからS時間後に、円周の隣の人に宝石を渡す
となります。
このため、円周上の人が最初に宝石をもらう時刻は、
"時刻Tに宝石をもらう"か"前の人が宝石をもらった時刻+前の人の時刻S"
のいずれかになります。
次に考えなくてはならないのがスタート位置です。円周上の人は円周の前の人から宝石をもらうので、宝石をもらう時刻は円周の前の人の影響を受けます。
便宜上、円周上のn番目の人を考えてみます。n-1番目の人が宝石をもらった時刻というのは、
Ti+Si+T(i+1)+S(i+1)・・・T(n-1)と考えられます。n-1番目の人の影響を受ける場合というのは、
Ti+Si+T(i+1)+S(i+1)・・・T(n-1)<Tnとなる時です。
即ち、Tが最も小さい人をスタート位置にすると前の人の影響を受けないと考えました。
また、今回円周を配列として扱います。配列の最後の番号はN-1なので、配列の番号であるkの値がNになった時、k=0とすることで円の問題に対応しました。
以上のことを踏まえ実装すると以下の様になります。
N=int(input())
S=list(map(int,input().split()))
T=list(map(int,input().split()))
T1=min(T)
k=T.index(T1)
ans=[0]*N
time=0
count=0
while(N>count):
if k==N:
k=0
if T[k]<time or count==0:
time=T[k]
ans[k]=time
time=time+S[k]
k+=1
count+=1
for p in range(N):
print(ans[p])