曾经沧海难为水,除却巫山不是云。|

Joey-Wang

园龄:4年3个月粉丝:17关注:0

3.1 简单模拟

3.1 简单模拟

http://codeup.cn/contest.php?cid=100000575

E Shortest Distance

image-20200702153841801

题目释义

给出一个简单周期的高速公路上的N个出口,找出任何一对出口之间的最短距离。

输入第一个N,接下来N个为Di,表示第i个和第i+1个出口之间的距离,DN表示第N个和第1个出口之间的距离。

给出M,接下来M组是要求最点距离的两个出口。

题目解析

以样例输入为例,表示有5个出口,各自距离如👇所示:

image-20200702154331644

我们可以把1出口到各个出口i间的距离纪录在数组a[i]中,为了方便这里不用a[0],显然a[1]=0。记录环形总长sum。

要求距离的start出口、end出口,有以下情况(假设end>start):

  • 其中一个为1,即求1出口到其他出口的最短距离,即max
  • 没有一个为1,则求max

代码

#include <cstdio>
int main() {
    int a[100005] = {0};
    int n, m, temp, sum = 0;
    scanf("%d", &n);
    for (int i = 2; i <=n; i++) {  //为了点后续计算方便,a[0]没有用,a[i]表示1到i点的距离,a[1]=0
        scanf("%d", &temp);
        sum += temp;
        a[i] = sum;
    }

    scanf("%d", &temp);
    sum+=temp;

    scanf("%d", &m);
    int start, end, ans, t2;
    for (int i = 0; i < m; i++) {
        scanf("%d %d", &start, &end);
        if (start > end) {
            t2 = end;
            end = start;
            start = t2;
        }
        if (start == 1) ans = a[end] < (sum - a[end]) ? a[end] : (sum - a[end]);
        else ans = (a[end] - a[start]) < (sum - a[end] + a[start]) ? (a[end] - a[start]) : (sum - a[end] + a[start]);
        printf("%d\n",ans);
    }
    return 0;
}

本文作者:Joey-Wang

本文链接:https://www.cnblogs.com/joey-wang/p/14541159.html

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   Joey-Wang  阅读(60)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
展开