
#include<stdio.h>
int main(){
int n,m,i,j,d[100000];
scanf("%d", &n);
for(i=1;i<=n;i++){
scanf("%d", &d[i]);
}
scanf("%d", &m);
int start,end,temp,sum1,sum2;
for(j=0;j<m;j++){
scanf("%d %d", &start, &end);
sum1 = sum2 = 0;
temp = start;
while(temp != end){
sum1 += d[temp];
temp++;
if(temp>n) temp = 1;
}
temp = start;
while(temp != end){
if(temp==1) temp = n+1;
sum2 += d[--temp];
}
if(sum1 <= sum2){
printf("%d\n", sum1);
}else {
printf("%d\n", sum2);
}
}
return 0;
}
运行超时。
#include<stdio.h>
int main(){
int n,m,i,j,d[100001],total=0,temp;
scanf("%d", &n);
//每个点存储的都是D1到该点的距离总和,D1存储环的总和
for(i=1;i<=n;i++){
scanf("%d", &temp);
total += temp;
d[i+1] = total;
}
d[1] = total;
scanf("%d", &m);
int start,end,t,sum1,sum2;
for(j=0;j<m;j++){
scanf("%d %d", &start, &end);
if(start > end){
t = start;
start = end;
end = t;
}
if(start == 1){
sum1 = d[end];
sum2 = d[1] - sum1;
}else {
sum1 = d[end] - d[start];
sum2 = d[1] - sum1;
}
if(sum1 <= sum2){
printf("%d\n", sum1);
} else {
printf("%d\n", sum2);
}
}
return 0;
}
正常。
优化C环形路径求和算法
本文介绍了一种计算环形数组中两点间最短路径和的算法,并通过优化提高了算法效率。优化后的算法避免了重复计算,显著减少了运行时间。
349

被折叠的 条评论
为什么被折叠?



