模拟赛的题目,做的时候由于第二题表打太久了,只剩下40分钟,想都没想就写了一个爆搜20分...

这道题单调性很关键,下面会解释

P.S.解释在代码里

#include<cstdio>
#include<iostream>
#include<cstring>
#include<cmath>
#include<algorithm>
#include<map>
using namespace std;
typedef long long ll;
inline int read(){
int ans=0,f=1;char chr=getchar();
while(!isdigit(chr)){if(chr=='-') f=-1;chr=getchar();}
while(isdigit(chr)) {ans=(ans<<3)+(ans<<1)+chr-48;chr=getchar();}
return ans*f;
}
inline void kai(){
freopen("cannon.in","r",stdin);
freopen("cannon.out","w",stdout);
}
const int maxn=250004;
struct data{
ll a,d;
bool operator <(const data &b)const{
return (a<b.a || (a==b.a && d<b.d));
}
}cnn[maxn],p[maxn];
ll k,h[maxn],ans=0;
int n,m,cnt=0;
map<ll,ll>f;
int main(){
n=read();m=read();k=read();
for(int i=n;i>=1;--i)h[i]=read();
for(int i=1;i<=m;++i)cnn[i].a=read(),cnn[i].d=read();
sort(cnn+1,cnn+1+m);
for(int i=1;i<=m;++i){
while(cnt && p[cnt].d<=cnn[i].d)--cnt;
p[++cnt]=cnn[i];
}//贪心删掉没有用的炮
/*
这里的贪心:如果一个炮打的低,能删掉的山的高度又小,那要它何用呢?
*/
ll dn=0;f[0]=0;
for(int i=1;i<=cnt;++i){
if(i!=1)dn=p[i-1].a;
ll l=max(dn,p[i].a-p[i].d);
for(ll j=l+1;j<=p[i].a;++j){
ll t=(j-dn-1)/p[i].d+1;
f[j]=f[max(0*1ll,j-(p[i].d*t))]+t;
}
}//处理出高度为x的山最少要删几次才行(类似于背包的做法?)
int j=1;
dn=0;
for(int i=1;i<=n;++i){
while(j<=cnt && p[j].a<h[i])++j;//第i座山用第j个炮,由于递增,可以一直下去
if(j>cnt)break;//如果当前山都处理不好,那么后面的山更不行 ,直接结束
if(j!=1)dn=p[j-1].a;
ll t=(h[i]-dn-1)/p[j].d+1;//因为单调性,可以直接用上一座山残留数据
ll q=f[max(0*1ll,h[i]-(p[j].d*t))]+t;//还是类似于背包
if(k>=q)k-=q,++ans;else break;//如果当前山加不进去,还是不行,结束
}
printf("%lld ",ans);
printf("%lld",k);
}

【贪心】小Y的炮[cannon]题解的更多相关文章

  1. 小Y的棋盘问题 题解

    有一个n*m的棋盘,上面有一些棋子,每行每列最多只会有一个棋子,不会有两个棋子八连通.问随机一个空格子作为起点,再随机地选择一个空格子作为终点,求问不经过任意棋子最短路的期望长度是多少.多组,n,m& ...

  2. 小Y的炮

    [存代码] #include<bits/stdc++.h> #define N 1000001 #define MAXN 100001 using namespace std; int n ...

  3. 【luoguP4006 清华集训2017】小Y和二叉树

    题目描述 小 Y 是一个心灵手巧的 OIer,她有许多二叉树模型. 小 Y 的二叉树模型中,每个结点都具有一个编号,小 Y 把她最喜欢的一个二叉树模型挂在了墙上,树根在最上面,左右子树分别在树根的左下 ...

  4. 【洛谷4005】小Y和地铁(搜索)

    [洛谷4005]小Y和地铁(搜索) 题面 洛谷 有点长. 题解 首先对于需要被链接的两个点,样例中间基本上把所有的情况都给出来了. 但是还缺了一种从下面绕道左边在从整个上面跨过去在从右边绕到下面来的情 ...

  5. P4005 小 Y 和地铁

    题目描述 小 Y 是一个爱好旅行的 OIer.一天,她来到了一个新的城市.由于不熟悉那里的交通系统,她选择了坐地铁. 她发现每条地铁线路可以看成平面上的一条曲线,不同线路的交点处一定会设有 换乘站 . ...

  6. BZOJ 1193 [HNOI2006]马步距离:大范围贪心 小范围暴搜

    题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1193 题意: 给定起点(px,py).终点(sx,sy).(x,y < 100000 ...

  7. B - 小Y上学记——小Y的玩偶

    B - 小Y上学记——小Y的玩偶 Time Limit: 2000/1000MS (Java/Others)    Memory Limit: 128000/64000KB (Java/Others) ...

  8. 【luogu P4007 清华集训2017】小Y和恐怖奴隶主

    题目背景 “A fight? Count me in!” 要打架了,算我一个. “Everyone, get in here!” 所有人,都过来! 题目描述 小 Y 是一个喜欢玩游戏的 OIer.一天 ...

  9. 【luogu P4005 清华集训2017】小Y和地铁

    题目描述 小 Y 是一个爱好旅行的 OIer.一天,她来到了一个新的城市.由于不熟悉那里的交通系统,她选择了坐地铁. 她发现每条地铁线路可以看成平面上的一条曲线,不同线路的交点处一定会设有 换乘站 . ...

随机推荐

  1. 一步一步教你用IntelliJ IDEA 搭建SSM框架(2)——配置mybatis-geneator

    我们要搭建整个SSM框架,所以要继续上篇文章没有完成的工作,下面配置mybatis-geneator,自动生成mybatis代码. 在上篇文章中的pom.xml的配置文件中已经加了mybatis-ge ...

  2. linux学习1-基础知识

    1.输入一行字跳到行头 ctrl+a:跳到行尾 ctrl+e: 2.一次创建多个文件 touch love_{1..10}_linux.txt touch love_{1,3,5}_linux.txt ...

  3. JavaSE 学习笔记之异 常(十)

    异 常: 异常:就是不正常.程序在运行时出现的不正常情况.其实就是程序中出现的问题.这个问题按照面向对象思想进行描述,并封装成了对象.因为问题的产生有产生的原因.有问题的名称.有问题的描述等多个属性信 ...

  4. hdu 4046 树状数组

    #include<stdio.h> #include<string.h> #define N  51000 char s[N]; int a[N],n; int number( ...

  5. Zend_Form 创建、校验和解析表单的基础--(手冊)

    1.  创建表单对象 创建表单对象很easy:仅仅要实现 Zend_Form: <?php $form = newZend_Form; ? > 对于高级用例.须要创建 Zend_Form ...

  6. POJ 3748:位操作

    位操作 Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 8964   Accepted: 3581 Description 如 ...

  7. H3C交换机经常使用命令汇总

    H3C交换机经常使用命令 1.查看Linux下查看port状态 root@root:~# netstat -an|grep -E "6002|6003" 2.H3C交换机显示当前配 ...

  8. MSP430WARE++的使用2:RSP1 driver的调用方法

        MSP430WARE是一套基于C++语言的开源的MSP430层次化软件架构,支持多种外设.本文将介绍雷达測速芯片RSP1驱动程序的调用方法.     1.硬件原理图      採用下图所看到的 ...

  9. Eclipse如何导入第三方jar包

    本文转自:http://blog.csdn.net/mazhaojuan/article/details/21403717  我们在用Eclipse开发程序的时候,经常要用到第三方jar包.引入jar ...

  10. xpath元素查找提示is not clickable

    1.用xpath可以在chrome找到 $x("//mandatory-config-dialog[@is-show='isShowMandatoryConfig']/div/div[2]/ ...