X を超えるた項数であることに注意。
abc220c.py
N = int(input())
A = list(map(int,input().split()))
X = int(input())
base = sum(A)
cnt = X//base
ans = 0
#print(cnt)
if cnt == 0:
for i in range(N):
ans += A[i]
if ans > X:
print(i+1)
exit()
else:
num = X%base
#print(cnt,num)
for i in range(N):
ans += A[i]
if ans > X-base*cnt:
print(N*cnt+i+1)
exit()
もう少し簡潔に書いてみよう。
abc220c.py
def solv():
N = int(input())
A = list(map(int, input().split()))
X = int(input())
cnt = X // sum(A)
num = sum(A) * cnt
if cnt == 0:
buf = 0
for i in range(N):
buf += A[i]
if buf > X:
print(i + 1)
break
else:
buf = num
for i in range(N):
buf += A[i]
if buf > X:
print(i + 1 + cnt * N)
break
solv()#52ms
cnt の数で場合分けしてるけど、
不要じゃね!?っと気付く。
abc220c.py
def solv():
N = int(input())
A = list(map(int,input().split()))
X = int(input())
cnt = X//sum(A)
num = sum(A)*cnt
buf = num
for i in range(N):
buf += A[i]
if buf > X:
print(i+1+cnt*N)
break
solv()#56ms
書きながら自分の考えを整理し、ココはまでは大丈夫と
自分をなだめながら本番に臨んでいる自分からすると前者の方が精神的にストレスが少なくて良い。
もっと実力が付けばサクッと後者の記述で切り抜けられるのだろう。