【PAT】A1046 Shortest Distance【简单模拟】

The task is really simple: given N exits on a highway which forms a simple cycle, you are supposed to tell the shortest distance between any pair of exits.

Input Specification:

Each input file contains one test case. For each case, the first line contains an integer N (in [3,10^​5​​ ]), followed by N integer distances D​1​​ D​2​​ ⋯ D​N​​ , where D​i​​ is the distance between the i-th and the (i+1)-st exits, and DN
​​ is between the N-th and the 1st exits. All the numbers in a line are separated by a space. The second line gives a positive integer M (≤10^​4​​ ), with M lines follow, each contains a pair of exit numbers, provided that the exits are numbered from 1 to N. It is guaranteed that the total round trip distance is no more than 10^​7
​​ .

Output Specification:

For each test case, print your results in M lines, each contains the shortest distance between the corresponding given pair of exits.

Sample Input:

5 1 2 4 14 9
3
1 3
2 5
4 1

Sample Output:

3
10
7

题意

给出有N个点的一个简单环和N个点之间的距离(最后一个数据为最后一个点到第一个点的距离),所有点编号为1~N。给出M个查询,求每个查询中一对点之间的最短距离。

思路

环上两个点之间的最短距离要么是从左端点直接到右端点,要么是从右端点到起始端点再走到左端点。所以我们用a[i]表示从1号到i+1号的距离。为了方便代码的书写,我们将编号映射到0~N-1。这样a[i]表示从0号到i号的距离(i = 1,…,N-1),所以a[0]为0号到自身的距离,当然就是0了,那么a[N]代表从N-1号到0号的距离。所以我们初始化a[0] = 0,然后边读入边依次计算从0号到第i号的距离。得到a数组后。对于M个查询,只需要再次将输入的两个点映射到0~N-1上,为了方便,总是取u为编号大的一个,v为编号小的一个。然后输出a[u] - a[v]和a[N] + a[v] - a[u]中小的一个。

代码

#include <cstdio>
#include <algorithm>
#define MAX_N 100000
using namespace std;
int a[MAX_N + 1];
int main() {
    // 读取输入并计算a[i](i = 1,2...,N)
    // a[i]代表从0号位置到i号位置的总距离
    int N;
    scanf("%d", &N);
    a[0] = 0;
    for(int i = 1, t; i <= N; i++){
        scanf("%d", &t);
        a[i] = a[i - 1] + t;
    }
    
    int M;
    scanf("%d", &M);
    for(int i = 0, u, v, t; i < M; i++){
        scanf("%d %d", &u, &v);
        // 交换编号(如果需要)使得u总是大于等于v,并将u、v映射到编号为0~N-1的空间
        if(u > v){
            t = u - 1;
            u = v - 1;
            v = t;
        }else{
            u--;
            v--;
        }
        
        // 输出答案,最短距离要么是从v->u,要么是从u->N->v
        printf("%d\n", min(a[v] - a[u], a[N] + a[u] - a[v]));
    }
    return 0;
}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
单片微型计算机(MCU)经过多年的发展,在性能上有很大的进步,在型号上发展到上千种类,已经广泛应用于人类社会生活的各个领域。单片机课程已经成为高校计算机、自动化、测控以及电子信息工程等专业的重要课程。该课程是一门理论性和实践性都很强的课程,在实际教学中,应将理论教学和实验教学紧密结合。学生在掌握理论知识之余,必须通过编写程序、设计硬件电路、仿真、调试这一系列的实验过程,才能更好地掌握单片机的结构原理和应用技能。随着单片机及其接口技术的飞速发展,目前市场上供应的编程仿真实验资源并不能完全满足高校单片机课程教与学的需求,构建低成本、技术先进、源码公开的单片机编程仿真实验系统,对我国单片机课程的教学和单片机领域人才的培养具有重要的现实意义。 本论文结合目前教学中对单片机编程仿真实验系统的实际需求,采用模块化结构设计思想,精心设计和开发了单片机编程仿真实验系统。该单片机编程仿真实验系统由PC机端单片机编程控制软件和单片机编程仿真实验板两部分组成。PC机端的单片机编程控制软件可以自动检测到连接到单片机编程仿真实验板上的单片机,控制单片机编程器擦除、写入、读出、校验目标单片机ROM中的程序,以十六进制文件(.HEX文件)格式显示在控制界面内;单片机仿真实验系统能够把写入单片机的程序实时地运行,并呈现实际运行效果。单片机编程控制软件和单片机仿真实验板组成一个完整的单片机编程仿真实验系统。
Every year the cows hold an event featuring a peculiar version of hopscotch that involves carefully jumping from rock to rock in a river. The excitement takes place on a long, straight river with a rock at the start and another rock at the end, L units away from the start (1 ≤ L ≤ 1,000,000,000). Along the river between the starting and ending rocks, N (0 ≤ N ≤ 50,000) more rocks appear, each at an integral distance Di from the start (0 < Di < L). To play the game, each cow in turn starts at the starting rock and tries to reach the finish at the ending rock, jumping only from rock to rock. Of course, less agile cows never make it to the final rock, ending up instead in the river. Farmer John is proud of his cows and watches this event each year. But as time goes by, he tires of watching the timid cows of the other farmers limp across the short distances between rocks placed too closely together. He plans to remove several rocks in order to increase the shortest distance a cow will have to jump to reach the end. He knows he cannot remove the starting and ending rocks, but he calculates that he has enough resources to remove up to M rocks (0 ≤ M ≤ N). FJ wants to know exactly how much he can increase the shortest distance *before* he starts removing the rocks. Help Farmer John determine the greatest possible shortest distance a cow has to jump after removing the optimal set of M rocks. Input Line 1: Three space-separated integers: L, N, and M Lines 2..N+1: Each line contains a single integer indicating how far some rock is away from the starting rock. No two rocks share the same position. Output Line 1: A single integer that is the maximum of the shortest distance a cow has to jump after removing M rocks Sample Inputcopy Outputcopy 25 5 2 2 14 11 21 17 4 Hint Before removing any rocks, the shortest jump was a jump of 2 from 0 (the start) to 2. After removing the rocks at 2 and 14, the shortest required jump is a jump of 4 (from 17 to 21 or from 21 to 25).
07-24
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值