环形公路问题
来源:互联网 发布:数据挖掘前景 编辑:程序博客网 时间:2024/05/15 21:17
1. 一个环形公路,不均匀得分布着n个加油站,每个加油站可提供的油量有限,单个加油站的油量之和刚好够一辆汽车跑完一圈,油箱容量不限,油耗均匀。用时间复杂度为O(n)的算法计算出从哪个点出发使得初始油箱为空的汽车刚好可以跑完一圈。思路参考http://blog.sina.com.cn/s/blog_65e729050100m7qy.html
#include<iostream>using namespace std ;#define MAX_NUM 100int main(){ int n ;/*假设加油站从1开始顺序编号, 1,2,…,n*/ double capacity[MAX_NUM+1] ;/*每个加油站的存油量*/ double cost[MAX_NUM+1] ; /*相邻两个加油站间路程消耗油量*/ double remain[MAX_NUM+1] ;/*汽车从第i个加油站出发时,到第i+1个加油站剩余的油量*/ cin>>n ; for( int i=1 ; i<=n ; i++ ) { cin>>capacity[i] ; } for( int i=1 ; i<=n ; i++ ) { cin>>cost[i] ; remain[i] = capacity[i]- cost[i] ; } int start = 1 , cnt = 0 , i = 1 ; double sum = 0.0 ; while( cnt<n ) { sum += remain[i] ; /*到达第i+1个站后剩余油量*/ cnt++ ; if( sum<0 ) /*选第i+1个站作为新起点*/ { sum = 0.0 ; start = (i+1>n ? 1:i+1) ; cnt = 0 ; } i = (i+1>n ? 1:i+1) ; } cout<<start<<endl ; /*输出找到的第一个满足条件的加油站编号*/ return 0 ;}测试用例
Sample Input:
5
2.4 3.1 4.0 5.5 4.2
3.0 2.3 1.6 5.9 3.9
Sample Output:
2(或者是3,根据选择的起点不同而异)
2. 一个环形公路,上面有N个站点,A1,A2…, AN,其中Ai和Ai+1之间的距离为Di,AN和A1之间的距离为D0。高效地求第i和第j个站点之间的最短距离,空间复杂度不超过O(N)。(2011Google校园招聘笔试题)
#include<iostream>using namespace std ;#define N 100000int dist[N+1] ;/*dist[i]表示第i个站点到第i+1个站点的最短距离*//*dist[n]存放环形公路的总长度,dist[0] = 0*/int shortest_distance( int i , int j , int n ){ int from , to , d ; if( i>j ) { from = j ; to = i ; } else { from = i ; to = j ; } d = dist[to-1]-dist[from-1] ; if( dist[n]-d<d ) return dist[n]-d ; else return d ;}int main(){ int n , m , s , t , dst ; dist[0] = 0 ; cin>>n ; for( int i=1 ; i<=n ; i++ ) { cin>>dst ; dist[i] = dist[i-1]+dst ; } cin>>m ; while(m--) { cin>>s>>t ; cout<<shortest_distance( s , t , n )<<endl ; } return 0 ;}
测试用例
Sample Input:
5 1 2 4 14 9
3
1 3
2 5
4 1
Sample Output:
3
10
7
- 环形公路问题
- 收费公路重建问题
- 公路重建问题
- [bzoj1196] 公路修建问题
- 【Bzoj1196】公路修建问题
- bzoj1196 公路修建问题
- bzoj1196[HNOI2006]公路修建问题
- 1196: [HNOI2006]公路修建问题
- [BZOJ1196] [HNOI2006]公路修建问题
- 1196: [HNOI2006]公路修建问题
- bzoj1196: [HNOI2006]公路修建问题
- BZOJ1196: [HNOI2006]公路修建问题
- 1196: [HNOI2006]公路修建问题
- bzoj1196[HNOI2006]公路修建问题
- 【BZOJ1996】【HNOI2006】公路修建问题
- 环形选人问题
- Josephus环形排列问题
- 环形加油站问题
- Android中ListView动态加载数据
- Berkeley DB Java Edition 基本示例
- GUI线程的异步并行设计
- 获取当前时间若干年、月、日、时等工具时间工具类
- Berkeley DB Java Edition使用说明
- 环形公路问题
- Oracle数据库联机日志文件丢失的几种处理方法
- gcc学习总结
- 【种子搜索】p2psearcher下载
- 使用gdb调试共享库代码
- 如何选择Html.RenderPartial和Html.RenderAction及Html.RenderAction与Html.Action区别
- 移动互联时代的门户变局
- 概率论与数理统计学习笔记四:参数估计
- vector向量容器(containers)及迭代器(iterators)在其中的应用