当前位置: 代码迷 >> 综合 >> pta--1046 Shortest Distance(20 分)(读题前缀和)
  详细解决方案

pta--1046 Shortest Distance(20 分)(读题前缀和)

热度:60   发布时间:2023-12-26 10:07:25.0

题目链接:https://pintia.cn/problem-sets/994805342720868352/problems/994805435700199424

【分析】

思路:给出一个序列,每个数字表示该点到下一个点的距离。求两点之间的最短距离。

分析:一开始没有仔细想,就想的比较复杂。其实这道题就一个环,两点之间的距离也就两种情况。要么是他们之间的距离d,要么是总距离减去这个d。这点看到了就很容易写了。注意求两点坐标时下标要减1的。

#include<bits/stdc++.h>
using namespace std;
const int maxn=1e5+5;
int dis[maxn],sum[maxn];
int main()
{int n,total=0;scanf("%d",&n);for(int i=1;i<=n;i++){scanf("%d",&dis[i]);total+=dis[i];sum[i]=total;}	int m;scanf("%d",&m);while(m--){int x,y;scanf("%d%d",&x,&y);if(x>y)swap(x,y);int d=sum[y-1]-sum[x-1];cout<<min(d,total-d)<<endl;}return 0;
}

 

  相关解决方案