PAT (Advanced Level) Practice 1046 Shortest Distance (20 分) 凌宸1642

题目描述:

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.

译:你的任务很简单:给定 N 个出口,形成一个简单的圆形公路,你应该说出任意一对出口之间的最短距离。


Input Specification (输入说明):

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.

译:每个输入文件包含一个测试用例,每个用例在第一行中包含一个正整数 N ( 3 ≤ N ≤10 5 ) , 紧跟着 N 个表示距离的整数 D1 D2 ⋯ DN , Di 表示 第 i 个 出口到第 i + 1 个出口之间的距离, DN 表示第 N 个出口到第 1 个出口之间的距离。所有的数字被一个空格分隔。第二行给出一个正整数 M (≤104) , 接下来 M 行,每行包含一对出口的编号,保证出口在 1 ,N之间。题目保证整个环道的距离不超过 107


Output Specification (输出说明):

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

译:对于每个测试用例,在 M 行中打印相应那对出口之间的最短距离 。


Sample Input (样例输入):

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

Sample Output (样例输出):

3
10
7

The Idea:

本题的最短距离还算简单。我们只需要一个 数组存储 第 1 个出口 到 第 i 个出口之间的距离。然后求两个出口之间的距离,就变成了简单的减法问题,由于是一个环道,最短距离需要考虑在两个距离之间抉择:a 到 b 的距离 和整个环道的距离 减去 a 到 b 的距离 。


The Codes:

#include<bits/stdc++.h>
using namespace std ;
#define MAX 100010
int sum[MAX] = { 0 } ;
int n , m , t , a , b ;
int main(){
scanf("%d" , &n) ;
for(int i = 1 ; i <= n ; i ++){
scanf("%d" , &t) ;
sum[i] = sum[i-1] + t ; // 计算 第 1 个出口 到 第 i 个出口之间的距离。
}
scanf("%d" , &m) ;
while(m --){
scanf("%d%d" , &a , &b) ;
if(a > b) swap(a , b) ; // 如果 a 大于 b 就交换一下
cout<<min(sum[b - 1] - sum[a - 1] , sum[n] - (sum[b - 1] - sum[a - 1]))<<endl ;
}
return 0;
}

最新文章

  1. Python【2】-列表和元组
  2. maven异常解决:编码GBK的不可映射字符
  3. 【Android Demo】获取指定网页的页面源代码
  4. 子网划分与CIDR(斜杠加数字的表示与IP 的关系)(改进)
  5. android 处理图片之--bitmap处理
  6. 挂载nfs系统问题之: Root-NFS: Server returned error -13 while mounting
  7. blog界面自己写了css,参考了网站设计,想要的自己拿
  8. 解决hadoop中 bin/hadoop fs -ls ls: `.&#39;: No such file or directory问题
  9. sprintf函数使用
  10. RedisHelper帮助类
  11. H5 20-属性选择器上
  12. RxSwift学习笔记7:buffer/window/map/flatMap/flatMapLatest/flatMapFirst/concatMap/scan/groupBy
  13. 吴裕雄 13-MySQL UPDATE 查询
  14. Android -- 处理ViewPager的notifyDataSetChanged无刷新
  15. Gedit
  16. 着重protected、default区别
  17. Linux下swap分区多大才合适的问题探讨
  18. Visual Studio下使用NUnit进行测试驱动开发
  19. ubuntu下关于profile和bashrc中环境变量的理解
  20. Android学习——SharedPreferences

热门文章

  1. ES6 Generator vs ES6 async/await
  2. NGK团队是如何打造超高回报率的BGV项目的?
  3. Python数据结构与算法_搜索插入位置(07)
  4. Anno&amp;Viper -分布式锁服务端怎么实现
  5. Numpy初体验
  6. Coposition 详解
  7. wxWidgets源码分析(8) - MVC架构
  8. vuex中辅助函数的使用方法
  9. jquery通过live绑定toggle事件
  10. C++类的静态成员笔记