1. 程式人生 > 其它 >PAT 甲級 1046.Shortest Distance (20)

PAT 甲級 1046.Shortest Distance (20)

題目

題目描述
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.
輸入描述:
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.
輸出描述:
For each test case, print your results in M lines, each contains the shortest distance between the corresponding given pair of exits.

理解

計算一個環路上的兩個節點,順逆時針兩個方向哪邊路徑更短。

思路

在輸入時可以用sum變數更新總長度,這樣後邊計算可以只計算單側長度,然後用sum做減法,更加方便。千萬別忘了每次輸出要換行!!!

程式碼

#include<iostream>
using namespace std;
int main()
{
    int n=0;
    cin>>n;
    int sum=0;
    int *a=new int[n];
    for(int i=0; i<n; i++)
    {
        cin>>a[i];
        sum+
=a[i]; } int k=0; cin>>k; for(int i=0; i<k; i++) { int p,q; cin>>p; cin>>q; p-=1; q-=1; if(p>q) { int temp=q; q=p; p=temp; } int r1=0,r2=0; for(int j=p; j<q; j++) { r1+=a[j]; } r2=sum-r1; //不要忘記輸出換行!!!!! (r1<r2)?cout<<r1<<endl:cout<<r2<<endl; } return 0; }