题目链接:点击打开链接
知识点笔记:
-- 做的时候有一个点没有想到,就是数组D[i]的设置,可以让查找的时间复杂度变为O(1)
纠结了一段时间在D[0]上,其实D[i]的就是1沿着顺时针到i的下一个点的距离之和,那D[0]就是0的下一个就是1,就是1到1的距离,当然是0了。。
AC代码:
#include <iostream>
#include <algorithm>
using namespace std;
const int MAXN = 100005;
int D[MAXN],A[MAXN];
int main() {
int n,k;
scanf("%d",&n);
int sum=0;
for(int i=1;i<=n;i++){
scanf("%d",&A[i]); //A[i]表示i到i+1点的距离
sum+=A[i];
D[i]=sum; //D[i]表示1到i号节点的下一个结点的位置
}
scanf("%d",&k);
int a,b;
for(int i=0;i<k;i++){
scanf("%d %d",&a,&b);
if(a>b) swap(a,b);
int dis = D[b-1]-D[a-1];
printf("%d\n",min(dis,sum-dis));
}
for(int i=0;i<6;i++){
printf("%d ",D[i]);
}
return 0;
}