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 }
  • 相关阅读:
    UVa 116 单向TSP(多段图最短路)
    POJ 1328 Radar Installation(贪心)
    POJ 1260 Pearls
    POJ 1836 Alignment
    POJ 3267 The Cow Lexicon
    UVa 1620 懒惰的苏珊(逆序数)
    POJ 1018 Communication System(DP)
    UVa 1347 旅行
    UVa 437 巴比伦塔
    UVa 1025 城市里的间谍
  • 原文地址:https://www.cnblogs.com/sworddance/p/3359288.html
Copyright © 2011-2022 走看看