P10086 [ROIR 2022 Day 1] 口算比赛 题解
因为最后只需要输出序列的数字总和,所以循环右移的时候,实际上并不需要真正的位移。可以用一个变量
计算新的数字和时,也不需要从头到尾算一遍。因为一次只改一个数,所以新的数字和
n=int(input())
a=list(map(int,input().split()))
q=int(input())
x=0 # 位移后新序列的第一个数在原序列的哪个位置
ans=0
for i in a:
ans+=i # 计算原序列的数字和
while q:
q-=1
s=list(map(int,input().split()))
if s[0]==2:
x-=s[1]
x+=n
x%=n
else:
p=(x+s[1]-1)%n
ans-=a[p]
a[p]=s[2]
ans+=a[p]
print(ans)
注意:
- 右移整个序列,相当于左移现序列的第一个数在原序列中的位置。
- 输入的数据是下标从
1 开始的。