[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


全部评论

相关推荐

06-18 16:45
门头沟学院 Java
玩脱了,吊着两家结果两家都不要鼠鼠了,我真想给自己两巴掌。
凉风落木楚山秋:当作是你把这两家公司从地球开除了就行了
点赞 评论 收藏
分享
秋招不是要开始了吗,我都打算润了,看大家还在找不敢润了
一条从:因为不是人人都像佬一样有实习像我们这种二本仔秋招没有实习也是白忙活
点赞 评论 收藏
分享
Yki_:你要算时间成本呀,研究生两三年,博士三四年,加起来就五六年了,如果你本科去腾讯干五年,多领五年的年薪,加上公司内涨薪,可能到时候十五年总薪资也跟博士差不多
点赞 评论 收藏
分享
缒梦&独舞:这家公司是这样的,去年给我实习offer了,不过也是面着玩儿的,他周六还要去做公益志愿活动
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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