题目描述

约翰的奶牛们发现山脊上的草特别美味。为了维持草的生长,约翰打算安装若干喷灌器。

为简化问题,山脊可以看成一维的数轴,长为L(1≤L≤1,000,000)L(1≤L≤1,000,000),而且L一定是一个偶数。每个喷灌器可以双向喷灌,并有确定的射程,该射程是一个整数,且不短于AA,不长于BB。A,B(1≤A≤B≤1000)A,B(1≤A≤B≤1000)都是给出的正整数。它所在位置的两边射程内,都属它的灌溉区域。现要求山脊的每一个区域都被灌溉到,而且喷灌器的灌溉区域不允许重叠。

约翰有N(1≤N≤1000)N(1≤N≤1000)只奶牛,每一只都有特别喜爱的草区,第i只奶牛的草区是[Si,Ei][Si,Ei],不同奶牛的草区可以重叠。现要求,每只奶牛的草区仅被一个喷灌器灌溉。寻找最少需要的喷灌器数目。

输入数据

第11行:N,LN,L.

第22:A,BA,B.

第33到N+2N+2行:每行22个整数Si,Ei,0≤S<E≤LSi,Ei,0≤S<E≤L.

输出数据

最小的喷灌器数目。如果无法设计出满足条件的喷灌器数目,请输出−1−1.

样例输入

2 8
1 2
6 7
3 6

样例输出

3
`

样例说明

如下图,只需安装三个喷灌器。c1,c2c1,c2为奶牛们的草区。

             |-----c2----|-c1|
|---1---|-------2-------|---3---|
+---+---+---+---+---+---+---+---+
0 1 2 3 4 5 6 7 8

数据范围

对于30%30%的数据,L≤100L≤100。

对于60%60%的数据,L≤10000L≤10000。

对于100%100%的数据,1≤L≤1,000,000,1≤A≤B≤1000,1≤N≤10001≤L≤1,000,000,1≤A≤B≤1000,1≤N≤1000。

题目分析

这道题我觉得我这辈子都AC不了了,其实就是在deque上面跑一遍单调就可以了。

好吧我其实AC了,代码如下:

#include<bits/stdc++.h>
using namespace std;
#define int long long
#define inf 1999999999
int n,l,a,b,f[];
bitset<>vis;
deque<int> q;
signed main(){
freopen("divide.in","r",stdin),freopen("divide.out","w",stdout);
cin>>n>>l>>a>>b;
for (int i=,s,e;i<=n;++i) {
cin>>s>>e;
for (int j=s+;j<e;++j) vis[j]=;
}for (int i=; i<=l; ++i) {
f[i]=inf;
while(!q.empty()&&q.front()<i-*b) q.pop_front();
if(!vis[i]&&i%==&&!q.empty())
f[i]=min(f[i],f[q.front()]+);
if(i-*a+>=&&!vis[i-*a+]&&(i-*a+)%==){
while(!q.empty()&&f[i-*a+]<f[q.back()]) q.pop_back();
q.push_back(i-*a+);
}}if (f[l]!=inf) cout<<f[l];
else cout<<-;
return ;
}

代码说明

不知道说什么好,过几次我讲一讲我和她的故事。

【Noip模拟 20160929】划区灌溉的更多相关文章

  1. 【BZOJ】【1986】【USACO 2004 Dec】/【POJ】【2373】划区灌溉

    DP/单调队列优化 首先不考虑奶牛的喜欢区间,dp方程当然是比较显然的:$ f[i]=min(f[k])+1,i-2*b \leq k \leq i-2*a $  当然这里的$i$和$k$都是偶数啦~ ...

  2. 【Noip模拟 20160929】选数

    题目描述 现在有一排共N个数,你需要从中选出恰好K个.选出K个数后,计算它们两两差值的绝对值的最小值S.你需要确定选出哪K个,才能最大化这个S. 输入数据 输入第一行两个正整数N.K,含义如上. 输入 ...

  3. 【Noip模拟 20160929】树林

    题目描述 现在有一片树林,小B很想知道,最少需要多少步能围绕树林走一圈,最后回到起点.他能上下左右走,也能走对角线格子. 土地被分成RR行CC列1≤R≤50,1≤C≤501≤R≤50,1≤C≤50,下 ...

  4. 【Noip模拟 20160929】花坛迷宫

    题目描述 圣玛格丽特学园的一角有一个巨大.如迷宫般的花坛.大约有一个人这么高的大型花坛,做成迷宫的形状,深受中世纪贵族的喜爱.维多利加的小屋就坐落在这迷宫花坛的深处.某一天早晨,久城同学要穿过这巨大的 ...

  5. BZOJ1986: [USACO2004 Dec] Dividing the Path 划区灌溉

    L<=1000000的土地上用长度在2*A~2*B的线段覆盖所有点,且给定n<=1000个区间,每个区间上只允许有一条线段,求最少多少线段,无解-1. f[i]表示填前i个土地最少线段,f ...

  6. 「题解」NOIP模拟测试题解乱写I(29-31)

    NOIP模拟29(B) T1爬山 简单题,赛时找到了$O(1)$查询的规律于是切了. 从倍增LCA那里借鉴了一点东西:先将a.b抬到同一高度,然后再一起往上爬.所用的步数$×2$就是了. 抬升到同一高 ...

  7. 2021.9.17考试总结[NOIP模拟55]

    有的考试表面上自称NOIP模拟,背地里却是绍兴一中NOI模拟 吓得我直接文件打错 T1 Skip 设状态$f_i$为最后一次选$i$在$i$时的最优解.有$f_i=max_{j<i}[f_j+a ...

  8. NOIP模拟赛20161022

    NOIP模拟赛2016-10-22 题目名 东风谷早苗 西行寺幽幽子 琪露诺 上白泽慧音 源文件 robot.cpp/c/pas spring.cpp/c/pas iceroad.cpp/c/pas ...

  9. HTML基础(二)——表单,图片热点,网页划区和拼接

    一.表单 <form id="" name="" method="post/get" action="负责处理的服务端&qu ...

随机推荐

  1. 使用element-ui 遇到的问题

    Pagination 分页 在使用分页的时候,每次切换pageSize的时候,需要把current-page置为1 重新加载数据. 但是当current-page !== 1的时候,修改current ...

  2. L2-013. 红色警报(并查集)*

    L2-013. 红色警报 参考博客 #include <cstdio> #include <algorithm> #include <iostream> #incl ...

  3. 产品经理面试题——浅谈O2O

    分析:O2O也要分种类.      现在的O2O 已经是线上线下相互融合的阶段了,无论是线上体验,线下消费还是线下体验,线上下单.都已有比较成熟的模式.我对O2O的理解就是以消费者为中心,整合线上和线 ...

  4. WEBBASE篇: 第七篇, JavaScript知识1

    JavaScript 1 一.JavaScript 概述什么是JavaScript: JavaScript 简称 JS,是一种专门运行于JS解释器/引擎中的解释型脚本语言JS发展史: 1.1992年N ...

  5. [LeetCode&Python] Problem 458. Poor Pigs

    There are 1000 buckets, one and only one of them contains poison, the rest are filled with water. Th ...

  6. C#程序优化的50种方案

    一.用属性代替可访问的字段 1..NET数据绑定只支持数据绑定,使用属性可以获得数据绑定的好处: 2.在属性的get和set访问器重可使用lock添加多线程的支持. 二.readonly(运行时常量) ...

  7. Codeforces1062B. Math(合数分解)

    题目链接:传送门 题目: B. Math time limit per test second memory limit per test megabytes input standard input ...

  8. yii2 获取模块名、控制器名、方法名

    在视图中: 模块名  $this->context->module->id控制器名 $this->context->id方法名 $this->context-> ...

  9. 寒假作业pta2

    7-1 币值转换 (20 分) 输入一个整数(位数不超过9位)代表一个人民币值(单位为元),请转换成财务要求的大写中文格式.如23108元,转换后变成"贰万叁仟壹百零捌"元.为了简 ...

  10. ArrayUtil的创建和使用

    求数组最小值求数组最大值遍历数组元素求数组总和求数组平均数求数组反转实现数组的复制对数组进行排序 写入的方法和包: public class ArrayUtil { //求数组的最大值 public ...