PAT (A)1046 Shortest Distance(满分20)

题目翻译:
任务真的很简单:一条高速公路上有N个出口,这N个出口构成了一个环,说出任意两个出口之间的最短距离。

输入要求:
每个输入文件包含一个测试用例。 对于每种情况,第一行包含一个整数N(取值在3到10的5次方),接下来是N个用整数表示的距离D1、D2…Dn,Di是第i个出口与第(i + 1)个出口之间的距离,Dn是第n个出口与第1个出口之间的距离。一行中的所有数字都用空格分隔。 第二行给出一个正整数M(≤10000),紧随其后的是M行,每行包含一对出口编号,但前提是出口的编号是从1到N,保证环形总距离不超过10的7次方。

输出要求:
对于每个测试用例,将结果打印成M行,每行包含对应的给定出口对之间的最短距离。

样例输入:
5 1 2 4 14 9
3
1 3
2 5
4 1

样例输出:
3
10
7

#include<iostream>

using namespace std;

int b[10005] = {
    
     0 };
int a[100005] = {
    
     0 };
int distant[100005] = {
    
     0 };
int main()
{
    
    
	int n;
	cin >> n;
	int sum = 0;
	int v;
	for (int i = 1; i <= n; i++)
	{
    
    
		cin >> v;
		a[i] = v;
		sum += v; // 环形距离总长度
		distant[i] = sum; // 提前求和数组
	}
	int m;
	cin >> m;
	int c, d;
	for (int i = 1; i <= m; i++)
	{
    
    
		cin >> c >> d;
		if (c > d) swap(c, d);
		int sum1 = 0, sum2 = 0;
		sum1 = distant[d - 1] - distant[c - 1];
		sum2 = sum - sum1;
		if (sum1 > sum2) b[i] = sum2;
		else b[i] = sum1;
	}
	for (int i = 1; i <= m; i++)
		cout << b[i] << endl;

	system("pause");
	return 0;
}

猜你喜欢

转载自blog.csdn.net/qq_27538633/article/details/105591737