问题 E: Shortest Distance (20)
时间限制: 1 Sec 内存限制: 32 MB
http://codeup.cn/problem.php?cid=100000575&pid=4
问题描述
给出N个点的距离,求最短距离。
输入
第一行输入一个n(3<=n<=10^5),之后n个数D1,D2,...Dn表示距离,Di表示i到i+1的距离(1<=i<=n-1),Dn表示n到1之间的距离。第二行输入一个m(m<=10^4),之后m行每行输入2个点(a,b)即起点和终点。
输出
对每一个名输出(a,b)输出从a到b的最短距离。
样例输入
5 1 2 4 14 9
3
1 3
2 5
4 1
样例输出
3
10
7
#include<stdio.h>
int main(){
int a[100000],b[10000];
int n;
scanf("%d",&n);
for(int i=1;i<=n;i++){
scanf("%d",&a[i]);
}
int m;
scanf("%d",&m);
for(int i=1;i<=m;i++){
int p,q;
scanf("%d %d",&p,&q);
int x=0,y=0;
if(p<q){
for(int j=p;j<q;j++){
x+=a[j];
}
while(p--){
if(p==0){
p=n;
}
y+=a[p];
if(p==q){
break;
}
}
}else{
for(int j=q;j<p;j++){
x+=a[j];
}
while(p--){
if(p==0){
p=n;
}
y+=a[p];
if(p==q){
break;
}
}
}
if(x<y){
b[i]=x;
}else{
b[i]=y;
}
}
for(int i=1;i<=m;i++){
printf("%d\n",b[i]);
}
return 0;
}
此算法结果正确但时间超限,跪求正确解法。