题目来自于百度2014校园招聘研发工程师笔试题(深圳站) 中的一个题目,题目描述如下
题目:数轴上n个点(a0,a1,.....an),长为L的绳子最多能覆盖多少个点。
刚开始把问题想的复杂化了,想引入动态规划和线段树,后来发现其实用一个队列模拟就可以了。而且可以直接使用STL的deque容器。
首先不停地向队列尾部插入点,当队列中的点无法被线段覆盖时则从队列首弹出点,直到队列中的元素可以重新被线段覆盖,这一过程模拟即可。
代码如下:
1 #include2 #include 3 using namespace std; 4 int main(){ 5 int l,n; 6 int queuelen=0; 7 cin>>l>>n; 8 deque ideque; 9 10 int count=0; 11 int num=0;12 int maxans=0;13 while(count >a;17 if(ideque.size()==0){18 queuelen=0;19 }else{20 queuelen+=a-ideque.back();21 }22 ideque.push_back(a);23 count++;24 num++;25 }26 if (maxans<(num-1)) maxans=num-1;27 while (queuelen>=l){28 int out=ideque.front();29 ideque.pop_front();30 if(ideque.size()==0){31 queuelen=0;32 }else{33 queuelen-=(ideque.front()-out);34 }35 num--;36 }37 } 38 cout<<"ans:"< <