【问题描述】
小Y最近开发出了批量制造大威力轰山炮的方法。才过去不到几个月,小Y就制造出了M门款式不同的轰山炮。第i门轰山炮发射一次,能使一座当前高度不高于Ai的山的高度降低Di(当然山的高度不能轰到0以下)。应政府要求,小Y要用他开发的轰山炮轰平开发
区的几座山。由于开发区急需土地资源,政府要求小Y轰平尽量多的山(轰平:使山的高度降低至0)。但是小Y制造的弹药有限,导致他最多只能发射K次。小Y想知道,他最多能轰平几座山?轰平这些山后,弹药最多还够他发射几次?

【问题分析】

贪心
如果一个炮相比于另一个炮(意大利),打的没它高,削减高度没它多,那你还用它干毛?对不对。这样的话时间代价O(NM),但是我常数写的大,O(10^7)过了一半的点。MD。

优化

预处理出所有山都需要几炮干掉 虽然确定是一个个连续的区间,但是山太高了 存不下啊 而且还存在特殊数据 比如说某一个炮d>h的时候,当山高h+1时,并且下一个炮d>h+1时,就不好处理。。。

所以 咋整? 考试的时候真的没有想出来。

观察 D<=500 ???
所以说为了避免上述情况 可以将每一个炮的[h-d,h]处理出来就可以了

#include <iostream>
#include <cstdio>
#include <algorithm>
#include <map>
using namespace std;
#define ll long long
const int N=250001;
const int M=501;
map<ll,ll> f;
struct gg {ll h;int d;}pao[M],use[M];
int n,m,cnt; ll hill[N]; ll k,ans;
ll readin()
{ll x=0,f=1; char ch=getchar();while(ch>'9'||ch<'0') {if(ch=='-')f=-1;ch=getchar();}while(ch>='0'&&ch<='9') {x=x*10+ch-'0';ch=getchar();}return x*f;
}
bool cmp(gg a,gg b)
{if (a.h==b.h)return a.d<b.d;return a.h<b.h;
}
void read()
{int i;n=readin(); m=readin(); k=readin();for (i=n;i>=1;i--)hill[i]=readin();for (i=1;i<=m;i++)pao[i].h=readin(),pao[i].d=readin();sort(pao+1,pao+1+m,cmp);pao[0]=(gg){0,0};for (i=1;i<=m;i++){while(cnt&&use[cnt].d<=pao[i].d) cnt--;use[++cnt]=pao[i];}use[0]=(gg){0,0};return;
}
long long mymax(long long a,long long b){return a>b?a:b;}
void solve()
{ll now=0,l,j,tmp; int i;f[0]=0;for (i=1;i<=cnt;i++){now=use[i-1].h;l=mymax(now,use[i].h-use[i].d);for (j=l+1;j<=use[i].h;j++){tmp=(j-now-1)/use[i].d+1;f[j]=f[mymax(0,j-(use[i].d*tmp))]+tmp;}}return;
}
void work()
{int i,j=1; ll now,tmp,need;for (i=1;i<=n;i++){while(j<=cnt&&use[j].h<hill[i]) j++;if (j>cnt){printf("%d %lld\n",i-1,k-ans);return;}now=use[j-1].h;tmp=(hill[i]-now-1)/use[j].d+1;need=f[mymax(0,hill[i]-(use[j].d*tmp))]+tmp;if (ans+need>k){printf("%d %lld\n",i-1,k-ans);return;}ans+=need;}printf("%d %lld\n",n,k-ans);return;
}
int main()
{freopen("canon.in","r",stdin);freopen("cannon.out","w",stdout);read();solve();work();return 0;
}

【贪心】(雾)小Y的炮相关推荐

  1. 【贪心】小Y的炮[cannon]题解

    模拟赛的题目,做的时候由于第二题表打太久了,只剩下40分钟,想都没想就写了一个爆搜20分... 这道题单调性很关键,下面会解释 P.S.解释在代码里 #include<cstdio> #i ...

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

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

  3. Loj #2324. 「清华集训 2017」小 Y 和二叉树

    Loj #2324. 「清华集训 2017」小 Y 和二叉树 小Y是一个心灵手巧的OIer,她有许多二叉树模型. 小Y的二叉树模型中,每个结点都具有一个编号,小Y把她最喜欢的一个二叉树模型挂在了墙上, ...

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

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

  5. D - 小Y上学记——要迟到了!

    D - 小Y上学记--要迟到了! Time Limit: 2000/1000MS (Java/Others)    Memory Limit: 128000/64000KB (Java/Others) ...

  6. 牛客练习赛44 A 小y的序列 (模拟,细节)

    链接:https://ac.nowcoder.com/acm/contest/634/A 来源:牛客网 小y的序列 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32768K,其他语 ...

  7. Loj #6089. 小 Y 的背包计数问题

    Loj #6089. 小 Y 的背包计数问题 Solution 似乎是比较套路的东西. 我们发现对于i≤ni\leq \sqrt ni≤n​的部分是一个多重背包,而剩下的部分是一个完全背包,因此考虑分 ...

  8. DFS:C 小Y的难题(1)

    解题心得: 1.在明确使用DFS之后一定要找到递归函数的出口.方向,以及递归的点(在某个情况下开始递归)(void 也可以return,但是没有返回值).递归时也要有递归的方向,最后都能够达到递归的出 ...

  9. 小Y看浮屠世界-往复式单螺杆混炼挤出机构造特征及其运用

    小Y看浮屠世界-往复式单螺杆混炼挤出机构造特征及其运用 TAG: 炼胶机 乳腺增生的治疗 煤炭化验设备 发电机 一,前言 随着塑料加工业中高分子资料工业的飞速开展,往复 式单螺杆混炼挤出机的开发运用日 ...

最新文章

  1. 使用 CocoaPods 给微信集成 SDK 打印收发消息
  2. GURB详解(实施级)
  3. python笔记总结_python学习笔记总结(1)
  4. JVM垃圾回收的时候如何确定垃圾?什么是GC Roots?
  5. tensorflow随笔-读取图像文件数据(1)
  6. 正则表达式 guava_带有正则表达式模式的Google Guava Cache
  7. java进程间通信rpc_进程间通信-浅谈RPC- 最小原型
  8. LeetCode 11. 盛最多水的容器
  9. 部署GitLab代码托管仓库
  10. 年度回顾 | 2019 年的 Apache Flink(文末有福利)
  11. 我不应该用计算机做题,超级计算器:能帮你做题的计算器,就是它了
  12. 深度学习之超分辨率算法——SRCNN
  13. 246 中心对称数
  14. amp; 取地址符的用法总结
  15. 【田间连着车间、佘太酒业这十年!
  16. CSS常用定位方法(绝对定位、相对定位、固定定位)
  17. SUDOKU-数独游戏
  18. 【系统分析师之路】2016年系统分析师上午综合知识历年真题
  19. 前端入门CSS(1)
  20. 绝对把老师气到撞墙的答卷和大学宿舍里出现频率最高的话

热门文章

  1. python中使用matplotlib.pyplot画函数图像
  2. Google Play In-app Billing
  3. arm服务器还是x86架构的服务器,哪个稳定?
  4. arm服务器计算性能,【干货分享】ARM/x86服务器的ceph性能对比报告
  5. 使您成为Windows专家的一些学习习惯
  6. 网易云音乐面向用户增长的数据治理实践
  7. 给南京沁恒芯片公司点个赞
  8. java代码耗尽内存_为什么运行Java应用程序的计算机几乎耗尽了物理内存,但仍然可以运行数周...
  9. Python函数*args与**kwargs的用法
  10. 李洪超 硬件工程师_工作六年,如何从 layout 转硬件工程师?丨版主采访(一)...