[PAT解题报告] Shortest Distance

给定一个环(高速公路),上面有n个点,每个点到下一个点的距离已知,问任意两点间的最短距离。
简单题,因为时一个环,从x到y的距离(x < y)可以从x正向走到y,也可以从y正向走到x,两者取最小就可以了。至于距离计算可以用“前缀和”。用sum[i]表示前i个点的距离和,其实也是“原点”到达第i个点的距离,或者理解为第i个点在圆上的坐标。下标从1开始,规定sum[0] = 0,那么x到y的距离 (x < y)可能是sum[y - 1] - sum[x - 1],也可能是sum[n] - (sum[y - 1] - sum[x - 1]),原因就是这是一个圈,距离可以两个方向算,总和恰好是圈长。这两者取最小就可以了。

代码:
#include <cstdio>
#include <string>
#include <cstring>
#include <algorithm>

using namespace std;

int sum[100005];
int main() {
int n;
    scanf("%d",&n);
    for (int i = 1; i <= n; ++i) {
        int x;
        scanf("%d",&x);
        sum[i] = x + sum[i - 1];
    }
    int m;
    scanf("%d",&m);
    for (;m;--m) {
        int x,y;
        scanf("%d%d",&x,&y);
        int temp = sum[max(x,y) - 1] - sum[min(x,y) - 1];
        printf("%d\n",min(temp, sum[n] - temp));
    }
    return 0;
}

原题链接: http://www.patest.cn/contests/pat-a-practise/1046


全部评论

相关推荐

能干的三文鱼刷了100道题:公司可能有弄嵌入式需要会画pcb的需求,而且pcb能快速直观看出一个人某方面的实力。看看是否有面试资格。问你问题也能ai出来,pcb这东西能作假概率不高
点赞 评论 收藏
分享
05-12 11:09
已编辑
门头沟学院 后端
已注销:没必要放这么多专业技能的描述。这些应该是默认已会的,写这么多行感觉在凑内容。项目这块感觉再包装包装吧,换个名字,虽然大家的项目基本都是网上套壳的,但是你这也太明显了。放一个业务项目,再放一个技术项目。技术项目,例如中间件的一些扩展和尝试。
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务