洛谷 P1485 火枪打怪
题目描述
LXL进入到了一片丛林,结果他发现有n只怪物排成一排站在他面前。LXL有一杆火枪能对付这些怪物。他知道从左至右数第i只怪物的血量是mi。现在LXL可以将一些子弹射向某个怪物。LXL可以控制他所发射的子弹数量及子弹的威力值。当某个子弹射到第i个怪物,如果这个子弹的威力值为p,除了这个怪物会掉p点血以外,它左边的第j个怪物(j<i),也会遭到Max(0, p - (i - j) * (i - j))的溅射伤害(好神奇的子弹)。当某只怪物的血量小于0时,它就死了,但它的尸体还在,即怪物的位置永远不会改变。LXL希望只用k发子弹,请你求出一个最小的正整数p,使LXL用k发子弹且每发子弹的威力值为p就可以消灭所有怪物。
SOL
我们显然可以发现这道题的二分性质。再细心观摩一波数据,50W,只能用O(nlogn)及以下的算法。二分需要一个log,这便要求我们O(n)处理check函数。
比较显然,我们可以差分。我们发现只有右边对左边有贡献,不妨从右到左做,我们发现这是一个二次多项式,那么可以二阶差分,对于单一的子弹来说,他的
伤害的差分是一个等差数列,K=2n-1,那对差分数组进行差分,我们统计对当前怪物有贡献的子弹,那么这个伤害的二阶差分就是两倍的子弹数。那么我们还
有一个问题,那就是子弹的伤害不可能是负数。我们有这样一个方法,我们在一颗子弹的伤害区域的最左侧打标记 -1,标示该位置之后出子弹范围,那么我们同
时在一阶差分数组中把多余的伤害减掉,那么这颗子弹之后就没有贡献了。
#include<bits/stdc++.h>
#define sight(c) ('0'<=c&&c<='9')
#define LL long long
inline void read(int &x) {
static char c;
for (;!sight(c);c=getchar());
for (x=;sight(c);c=getchar())x=x*+c-;
}
inline void read(long long &x) {
static char c;static int b;
for (b=;!sight(c);c=getchar())if (c=='-') b=-;
for (x=;sight(c);c=getchar())x=x*+c-;
x*=b;
}
#define N 501007
#define min(a,b) (a)<(b)?(a):(b)
#define HP a
LL len,ans2,ans,Ans,cm,n,dle,a[N],k,r,c1[N],c2[N],c3[N],c4[N],hp[N];
bool check(LL P)
{
int sss=sqrt(P); int tot=;
LL t1=,t2=,t3=,t0=;
memset(c1,,sizeof(c1)); memset(c2,,sizeof(c2));
memset(c3,,sizeof(c3)); memset(c4,,sizeof(c4));
for(int i=;i<=n;++i)hp[n-i+]=HP[i]+;//记得+1,因为怪物0血还没有死
for(int i=;i<=n;++i)
{
t3+=c3[i]; t2+=c2[i];
t1+=c1[i]+t2; t0+=t1+c4[i];
hp[i]-=1ll*P*t3-t0;
if(hp[i]<=)continue; int gg=((hp[i]+P-)/P);
tot+=gg; if(tot>k)return false;
c3[i+]+=gg;c3[min(n+,i+sss+)]-=gg;
c2[i+]+=1ll**gg;c2[min(n+,i+sss+)]-=*gg;
c1[i+]-=gg;c1[min(n+,i+sss+)]-=1ll*(1ll**sss-)*gg;
c4[min(n+,i+sss+)]-=1ll*sss*sss*gg;
}
return tot<=k;
}
int main () {
read(n); read(k);
for (int i=;i<=n;i++) read(a[i]);
r=1ll<<;
while (r) {
if (!check(ans+r)) ans+=r;
r>>=;
}
printf("%lld\n",ans+); return ;
}
洛谷 P1485 火枪打怪的更多相关文章
- 洛谷1640 bzoj1854游戏 匈牙利就是又短又快
bzoj炸了,靠离线版题目做了两道(过过样例什么的还是轻松的)但是交不了,正巧洛谷有个"大牛分站",就转回洛谷做题了 水题先行,一道傻逼匈牙利 其实本来的思路是搜索然后发现写出来类 ...
- 洛谷P1352 codevs1380 没有上司的舞会——S.B.S.
没有上司的舞会 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题目描述 Description Ural大学有N个职员,编号为1~N.他们有 ...
- 洛谷P1108 低价购买[DP | LIS方案数]
题目描述 “低价购买”这条建议是在奶牛股票市场取得成功的一半规则.要想被认为是伟大的投资者,你必须遵循以下的问题建议:“低价购买:再低价购买”.每次你购买一支股票,你必须用低于你上次购买它的价格购买它 ...
- 洛谷 P2701 [USACO5.3]巨大的牛棚Big Barn Label:二维数组前缀和 你够了 这次我用DP
题目背景 (USACO 5.3.4) 题目描述 农夫约翰想要在他的正方形农场上建造一座正方形大牛棚.他讨厌在他的农场中砍树,想找一个能够让他在空旷无树的地方修建牛棚的地方.我们假定,他的农场划分成 N ...
- 洛谷P1710 地铁涨价
P1710 地铁涨价 51通过 339提交 题目提供者洛谷OnlineJudge 标签O2优化云端评测2 难度提高+/省选- 提交 讨论 题解 最新讨论 求教:为什么只有40分 数组大小一定要开够 ...
- 洛谷P1371 NOI元丹
P1371 NOI元丹 71通过 394提交 题目提供者洛谷OnlineJudge 标签云端评测 难度普及/提高- 提交 讨论 题解 最新讨论 我觉得不需要讨论O long long 不够 没有取 ...
- 洛谷P1538迎春舞会之数字舞蹈
题目背景 HNSDFZ的同学们为了庆祝春节,准备排练一场舞会. 题目描述 在越来越讲究合作的时代,人们注意的更多的不是个人物的舞姿,而是集体的排列. 为了配合每年的倒计时,同学们决定排出——“数字舞蹈 ...
- 洛谷八月月赛Round1凄惨记
个人背景: 上午9:30放学,然后因为学校举办读书工程跟同学去书城选书,中午回来开始打比赛,下午又回老家,中间抽出一点时间调代码,回家已经8:50了 也许是7月月赛时“连蒙带骗”AK的太幸运然而因同学 ...
- 洛谷 P1379 八数码难题 Label:判重&&bfs
特别声明:紫书上抄来的代码,详见P198 题目描述 在3×3的棋盘上,摆有八个棋子,每个棋子上标有1至8的某一数字.棋盘中留有一个空格,空格用0来表示.空格周围的棋子可以移到空格中.要求解的问题是:给 ...
随机推荐
- python 生成html文件(表格)
import pandas as pd def convert_to_html(result,title): d = {} index = 0 for t in title: d[] = result ...
- CCF-201312-1-出现次数最多的数
问题描述 试题编号: 201312-1 试题名称: 出现次数最多的数 时间限制: 1.0s 内存限制: 256.0MB 问题描述: 问题描述 给定n个正整数,找出它们中出现次数最多的数.如果这样的数有 ...
- SQL面试题:有A B C三列,用SQL语句实现:当A列大于B列时选择A列否则选择B列
.请教一个面试中遇到的SQL语句的查询问题 表中有A B C三列,用SQL语句实现:当A列大于B列时选择A列否则选择B列,当B列大于C列时选择B列否则选择C列. ------------------- ...
- 4、C#基础 - C# 的 常见概念简述
在上篇文章中,你跟着我写了一个HelloWorld,本篇中,我们来谈谈一些C#程序中的小概念 1.C# 程序结构 一个 C# 程序主要包括以下部分: 命名空间声明(Namespace declarat ...
- Centos-6.5 + python3 + mysql5.6 环境搭建
注意:Centos6.5 是刚装好的系统 yum install lrzsz (ftp上传和下载) yum install -y gcc yum install -y gcc gcc-c++ ...
- Jenkins+tomcat+jdk setup
Jenkins download: http://jenkins-ci.org/ jdk version:jdk-7u45-linux-x64.tar.gz tomcat version:apache ...
- Ubuntu1204 vim中文乱码解决方法
加入中文字符编码 sudo vi /var/lib/locales/supported.d/local #加入以下的中文字符集 zh_CN.GBK GBK zh_CN.GB2312 GB2312 zh ...
- Codeforces 149 E. Martian Strings
正反两遍扩展KMP,维护公共长度为L时.出如今最左边和最右边的位置. . .. 然后枚举推断... E. Martian Strings time limit per test 2 seconds m ...
- Python3.x和Python2.x的区别【转】
转载自:https://www.cnblogs.com/codingmylife/archive/2010/06/06/1752807.html 1.性能 Py3.0运行 pystone benchm ...
- redis的sorted set类型
1.简单描述 和set类型一样,sorted set也是string类型元素的集合,不同的是每个元素都会关联一个double类型的score.sorted set的实现是skip list和hash ...