だいぶ悩んだ。
アプローチ1
No1 すぬけさんからスタートする場合、
No2 ,T[2] から宝石を受け取って、 3, 4, ,5 ,6 ... N,1 と No1 すぬけさんに戻るまでの時間
No3 ,T[3] から宝石を受け取って、 4, ,5 ,6 ... N,1 と No1 すぬけさんに戻るまでの時間
・
・
の中から最小の時間を求める。
アプローチ2
No1 が終わったら No2 を基準に start し、アプローチ1 と同じことをやる。
。。多分、for 分は N だけだと足りない。2*N は必要だと気付く。
よし、行ける!!っと思い、思惑通りに書いたつもりだったが、
WA となって、全くそうなってないことに気付く。
abc214c_ng.py
N = int(input())
S = list(map(int,input().split()))
T = list(map(int,input().split()))
lis = [[T[i]] for i in range(N)]
for i in range(1,2*N):
if i>1:
lis[i%N].append(lis[(i-1)%N][0] + S[(i-1)%N])#アプローチ
lis[i%N].append(lis[(i-1)%N][-1] + S[(i-1)%N]) #アプローチ
for i in range(N):
print(min(lis[i]))
リスト内のデータが増えていき、どれとどれを使って
演算しなければならないかゴチャゴチャになったために
サンプルが通っただけで、出来たと思い込んでしまった。それが敗因。
アプローチ3
例えば、すぬけさんを通過する度に最小となる時間を選択することができれば、
シンプルで分かり易いのではないだろうか?
っと考えて以下を書いたら通った。
abc214c_ok.py
N = int(input())
S = list(map(int,input().split()))
T = list(map(int,input().split()))
lis = [0]*N
lis[0] = T[0]
for i in range(1,2*N):
lis[i%N] = min(T[i%N],lis[(i-1)%N]+S[(i-1)%N])
for i in range(N):
print(lis[i])
なかなか勉強させてもらった。