测评会员优惠活动进行中 · 开通 VIP,有效期内测评不限次 VIP 优惠中 · 测评不限次 立即查看

A29783. 环形公路出口

填空题 中等

题目描述

环形公路出口

题目描述

一条环形高速公路有N个出口,给定任意一对出口,请你算出这两个出口的最短距离。

输入

输入第一行给出区间[3,10^5]内的整数N,以及N个整数距离 D1,D2,,,,,,DN,其中Di 是第i和第i+1个出口之间的距离,DN是第N和第1个出口之间的距离。同行数字间以空格分隔。

第二行给出正整数M(≤10^4)。随后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 main(){ int s[100005]={0},n,m; //s[] 前缀和 cin>>n; for(int i=1;i<=n;i++) { int x; cin>>x; //a[i]:i到i+1的距离 if(i!=n) s[i+1]=s[i]+x; //s[i]:1到i的距离 else s[n+1]=x; //s[n+1]存储n到1的距离 } cin>>m; //查询次数 while(m--){ int x,y; cin>>x>>y; if(y<x) swap(x,y); //保证y在x后面 //s[n]-s[y]+s[n+1]+s[x]:从y到n,再从n到1,再从1到x if(s[y]-s[x] < s[n]-s[y]+s[n+1]+s[x]) cout<<s[y]-s[x]<<endl; else cout<<s[n]-s[y]+s[n+1]+s[x]<<endl; } return 0; }
上一题 下一题