数轴上n个点(a0,a1,.....an),长为L的绳子最多能覆盖多少个点。
2013-10-09 15:12
761 查看
题目来自于百度2014校园招聘研发工程师笔试题(深圳站) 中的一个题目,题目描述如下
题目:数轴上n个点(a0,a1,.....an),长为L的绳子最多能覆盖多少个点。
刚开始把问题想的复杂化了,想引入动态规划和线段树,后来发现其实用一个队列模拟就可以了。而且可以直接使用STL的deque容器。
首先不停地向队列尾部插入点,当队列中的点无法被线段覆盖时则从队列首弹出点,直到队列中的元素可以重新被线段覆盖,这一过程模拟即可。
代码如下:
题目:数轴上n个点(a0,a1,.....an),长为L的绳子最多能覆盖多少个点。
刚开始把问题想的复杂化了,想引入动态规划和线段树,后来发现其实用一个队列模拟就可以了。而且可以直接使用STL的deque容器。
首先不停地向队列尾部插入点,当队列中的点无法被线段覆盖时则从队列首弹出点,直到队列中的元素可以重新被线段覆盖,这一过程模拟即可。
代码如下:
#include<iostream> #include<deque> using namespace std; int main(){ int l,n; int queuelen=0; cin>>l>>n; deque<int> ideque; int count=0; int num=0; int maxans=0; while(count<n){ while(queuelen<l&&count<n){ int a; cin>>a; if(ideque.size()==0){ queuelen=0; }else{ queuelen+=a-ideque.back(); } ideque.push_back(a); count++; num++; } if (maxans<(num-1)) maxans=num-1; while (queuelen>=l){ int out=ideque.front(); ideque.pop_front(); if(ideque.size()==0){ queuelen=0; }else{ queuelen-=(ideque.front()-out); } num--; } } cout<<"ans:"<<maxans<<endl; system("pause"); return 0; }
相关文章推荐
- [经典面试题][百度]数轴上从左到右有n各点a[0], a[1], ……,a[n -1],给定一根长度为L的绳子,求绳子最多能覆盖其中的几个点。
- 数轴上从左到右有n个点a[0],a[1]…,a[n-1],给定一根长度为L的绳子,求绳子最多能覆盖其中的几个点。要求算法复杂度为o(n)。
- 数轴上从左到右有n个点a[0],a[1]…,a[n-1],给定一根长度为L的绳子,求绳子最多能覆盖其中的几个点。要求算法复杂度为o(n)。
- 百度笔试题:绳子最多覆盖多少个点
- 数轴上从左到右有n个点a[0],a[1]…,a[n-1],给定一根长度为L的绳子,求绳子最多能覆盖其中的几个点。要求算法复杂度为o(n)。
- [经典面试题][百度]数轴上从左到右有n各点a[0], a[1], ……,a[n -1],给定一根长度为L的绳子,求绳子最多能覆盖其中的几个点。
- 百度笔试题:绳子最多覆盖多少个点
- 给定一系列x轴的点坐标,例如 1,3,7,8,9,11这些坐标升序放在数组中,现在给一根绳子,长度为4,问绳子最多能覆盖的点数有多少,例如绳子放前面只能覆盖两个点,1,3,如果放后面能覆盖4个点。
- 数轴上从左到右有n个点、a[0] a[1]……a[n-1]给定一根长度为l绳子、求绳子最多覆盖其中几个点
- 尺子最多覆盖多少点
- 数轴上覆盖最多点的数目
- 给定长度为n的整数数列:a0,a1,..,an-1,以及整数S。这个数列会有连续的子序列的整数总和大于S的,求这些数列中,最小的长度。
- Pairs Forming LCM 在a,b中(a,b<=n)(1 ≤ n ≤ 10^14),有多少组(a,b) (a<b)满足lcm(a,b)==n; lcm(a,b)=p1 ^ max(a1,b1) * p2 ^ max(a2,b2) *..........*pn ^ max(an,bn)
- 绳子可以覆盖的最多点数
- 求绳子最多能覆盖的点
- hdu 2295 Radar 重复覆盖 DLX+二分答案 给出一些城市及一些雷达的坐标,要求从这些雷达中选取最多k个能够覆盖所有的城市,问雷达的最小覆盖半径为多少
- 给定一个递增序列,a1 <a2 <...<an 。定义这个序列的最大间隔为d=max{ai+1 - ai }(1≤i<n),现在要从a2 ,a3 ..an-1 中删除一个元素。问剩余序列的最大间隔最小是多少?
- Shell最多可以输入多少个参数?
- 平面上画1999条直线,最多能将平面分成多少部分?
- 集合A中最多有多少个元素