您的位置:首页 > 其它

数轴上n个点(a0,a1,.....an),长为L的绳子最多能覆盖多少个点。

2013-10-09 15:12 761 查看
题目来自于百度2014校园招聘研发工程师笔试题(深圳站) 中的一个题目,题目描述如下

题目:数轴上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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐