zoukankan      html  css  js  c++  java
  • 数轴上n个点(a0,a1,.....an),长为L的绳子最多能覆盖多少个点。

    题目来自于百度2014校园招聘研发工程师笔试题(深圳站)  中的一个题目,题目描述如下

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

        刚开始把问题想的复杂化了,想引入动态规划和线段树,后来发现其实用一个队列模拟就可以了。而且可以直接使用STL的deque容器。

    首先不停地向队列尾部插入点,当队列中的点无法被线段覆盖时则从队列首弹出点,直到队列中的元素可以重新被线段覆盖,这一过程模拟即可。

    代码如下:

     1 #include<iostream>
     2 #include<deque>
     3 using namespace std;
     4 int main(){
     5     int l,n;
     6     int queuelen=0;
     7     cin>>l>>n;
     8     deque<int> ideque;
     9             
    10     int count=0;  
    11     int num=0;
    12     int maxans=0;
    13     while(count<n){
    14         while(queuelen<l&&count<n){
    15             int a;
    16             cin>>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:"<<maxans<<endl;
    39     system("pause");
    40     return 0;
    41 }
  • 相关阅读:
    iOS 远程推送
    iOS 本地推送
    iOS 循环利用的注意事项
    iOS 通知代理执行代理方式时,代理为nil的解决办法
    iOS SSZipArchive
    iOS PushMebaby
    Objective
    Objective
    Objective
    Objective
  • 原文地址:https://www.cnblogs.com/sworddance/p/3359288.html
Copyright © 2011-2022 走看看