- 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. php
- 任务真的很简单:给定高速公路上的N个出口,造成一个简单的循环,你应该说出任何一对出口之间的最短距离。数组
- Each input file contains one test case. For each case, the first line contains an integer N (in [3, 105]), followed by N integer distances D1 D2 ... DN, where Di 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 (<=104), 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 107. ide
- 每一个输入文件都包含一个测试用例。 对于每种状况,第一行包含整数N(在[3,105]中),后跟N个整数距离d1d2...Dn,其中Di是第i个出口和第(i+1)个出口之间的距离,Dn是第N个和第一个出口之间的距离。一行中的全部数字都用空格分隔。第二行给出正整数M(<=104),后面跟着M行,每行都包含一对出口编号,前提是出口编号从1到N。保证往返总距离不超过107。测试
- For each test case, print your results in M lines, each contains the shortest distance between the corresponding given pair of exits.
- 对于每一个测试用例,以M行打印结果,每行包含相应的给定出口对之间的最短距离。 spa
- 题意:给出N个出口之间的距离,而后输入M对出口,计算这M对出口之间的最短距离,
- 首先,在输入每一个边的时候,就计算两个量,
- 一个是这个环的总距离,用一个num累加就可实现,
- 另外一个,是第一个顶点距离各个顶点的距离,用一维数组实现,
- 每一个顶点的值等于输入的距离加上上一个顶点的值,初始将1这个顶点的值置为0,由于1到1自己就是0。
- 再根据输入的两个顶点,将它们和顶点1之间的距离相减,就获得了其中一个距离,
- 另外一个距离经过环的总距离减去这个距离就能获得了,
- 而后比较两个的大小,输出最小的。code
#include <stdio.h> int main(){ int n,m,i,a[100000],b[100000],num=0; scanf("%d",&n); for(i=1;i<=n;i++){ scanf("%d",&a[i]); num += a[i]; //环的总距离 b[i+1]=b[i]+a[i]; //第一个顶点距离各个顶点的距离 } int f1,f2,k1,k2; scanf("%d",&m); for(i=0;i<m;i++){ scanf("%d %d",&f1,&f2); int t1=(f1<f2?f1:f2); int t2=(f1>f2?f1:f2); k1=b[t2]-b[t1]; k2=num-k1; printf("%d\n",(k1>k2?k2:k1)); } return 0; }