BZOJ3203 保护出题人(defend)
保护出题人(defend)
题目描述
输入
第一行两个空格隔开的正整数n和d,分别表示关数和相邻僵尸间的距离。
接下来n行每行两个空格隔开的正整数,第i + 1行为 a i和 x i,分别表示相比上一关
在僵尸队列排头增加血量为 a i点的僵尸,排头僵尸从距离房子 x i米处开始接近。
输出
一个数,n关植物攻击力的最小总和 ,保留到整数。
样例输入
5 2
3 3
1 1
10 8
4 8
2 3
样例输出
7
提示
来源
solution
把ai前缀和起来
得到一个式子:
拆开
很像吧
显然凸包上的点有用,那就把( aj,-j*d ) 建凸包。
对于点(a[i],i*d+x[i]) 斜率是单峰的。
那么可以三分。
注意整数三分
#include<cstdio>
#include<iostream>
#include<cstdlib>
#include<cstring>
#include<algorithm>
#include<cmath>
#define maxn 1000005
#define ll long long
using namespace std;
ll n,d,top;
double ans;
struct node{
ll a,x;
}s[maxn];
struct po{
ll x,y;
}zh[maxn],nex,q;
po xl(po a,po b){
po t;
t.x=a.x-b.x;t.y=a.y-b.y;
return t;
}
ll cj(po a,po b){
return a.x*b.y-a.y*b.x;
}
double getk(po a,po b){
double dx=a.x-b.x,dy=a.y-b.y;
return dy/dx;
}
double ask(po q){
ll l=1,r=top;
while(r-l>=3){//zhengshu sanfen
int lm=l+(r-l)/3,rm=r-(r-l)/3;
double k1=getk(zh[lm],q),k2=getk(zh[rm],q);
if(k1>k2)r=rm;
else l=lm;
}
double fs=0;
for(ll i=l;i<=r;i++)
fs=max(fs,getk(zh[i],q));
return fs;
}
int main()
{
cin>>n>>d;
for(ll i=1;i<=n;i++){
scanf("%lld%lld",&s[i].a,&s[i].x);
s[i].a+=s[i-1].a;
}
for(ll i=1;i<=n;i++){
nex.x=d*i;nex.y=s[i-1].a;
while(top>1&&cj(xl(zh[top],zh[top-1]),xl(nex,zh[top]))<0)top--;
zh[++top]=nex;
q.x=s[i].x+d*i;q.y=s[i].a;
ans+=ask(q);
}
printf("%.0lf\n",ans);
return 0;
}
BZOJ3203 保护出题人(defend)的更多相关文章
- 【BZOJ3203】[Sdoi2013]保护出题人 二分+凸包
[BZOJ3203][Sdoi2013]保护出题人 Description Input 第一行两个空格隔开的正整数n和d,分别表示关数和相邻僵尸间的距离.接下来n行每行两个空格隔开的正整数,第i + ...
- 【BZOJ3203】保护出题人(动态规划,斜率优化)
[BZOJ3203]保护出题人(动态规划,斜率优化) 题面 BZOJ 洛谷 题解 在最优情况下,肯定是存在某只僵尸在到达重点的那一瞬间将其打死 我们现在知道了每只僵尸到达终点的时间,因为僵尸要依次打死 ...
- [BZOJ3203] [SDOI2013]保护出题人(二分+凸包)
[BZOJ3203] [SDOI2013]保护出题人(二分+凸包) 题面 题面较长,略 分析 对于第i关,我们算出能够打死前k个个僵尸的最小能力值,再取最大值就可以得到\(y_i\). 前j-1个僵尸 ...
- 洛谷 P3299 [SDOI2013]保护出题人 解题报告
P3299 [SDOI2013]保护出题人 题目描述 出题人铭铭认为给SDOI2012出题太可怕了,因为总要被骂,于是他又给SDOI2013出题了. 参加SDOI2012的小朋友们释放出大量的僵尸,企 ...
- [SDOI2013]保护出题人
题目 出题人铭铭认为给SDOI2012出题太可怕了,因为总要被骂,于是他又给SDOI2013出题了. 参加SDOI2012的小朋友们释放出大量的僵尸,企图攻击铭铭的家.而你作为SDOI2013的参赛者 ...
- 【JZOJ3299】【SDOI2013】保护出题人 三分+凸壳
题面 出题人铭铭认为给SDOI2012 出题太可怕了,因为总要被骂,于是他又给SDOI2013 出题了. 参加SDOI2012 的小朋友们释放出大量的僵尸,企图攻击铭铭的家.而你作为SDOI2013 ...
- BZOJ3203 SDOI2013保护出题人(三分)
给a做一个前缀和,那么现在每次所查询的就是(sn-sk)/(bn+nd-(k+1)d)的最大值.这个式子可以看成是(bn+nd,sn)和((k+1)d,sk)所成直线的斜率. 脑补一条直线不断减小斜率 ...
- bzoj3203【sdoi2013】保护出题人
题目描述 输入格式 第一行两个空格隔开的正整数n和d,分别表示关数和相邻僵尸间的距离.接下来n行每行两个空格隔开的正整数,第i + 1行为Ai和 Xi,分别表示相比上一关在僵尸队列排头增加血量为Ai ...
- [BZOJ3203][SDOI2013]保护出题人(凸包+三分)
https://www.cnblogs.com/Skyminer/p/6435544.html 先不要急于转化成几何模型,先把式子化到底再对应到几何图形中去. #include<cstdio&g ...
随机推荐
- 解决mysql8小时无连接自动断掉机制
windows下打开my.ini,增加: interactive_timeout=28800000 wait_timeout=28800000 MySQL是一个小型关系型数据库管理系统,由于MySQL ...
- 漫谈 Clustering (3): Gaussian Mixture Model
上一次我们谈到了用 k-means 进行聚类的方法,这次我们来说一下另一个很流行的算法:Gaussian Mixture Model (GMM).事实上,GMM 和 k-means 很像,不过 GMM ...
- CUDA编程时,线程块的处理方法
- 用gulp把less文件编译成css文件
第一次使用gulp构建工具,使用gulp将.less文件编译成.css文件并输出.根据视频做了笔记.提供新手和自己以后做参考. HTML文件 <!DOCTYPE html> <htm ...
- idea右侧的工具栏不见,包括maven以及其他
通用,设置后右侧工具栏可见 可以通过view-->windows tool看到maven的
- Qt之QThread随记
这是一篇随记,排版什么的就没有那么好了:) 首先要知道,一个线程在资源分配完之后是以某段代码为起点开始执行的,例如STL内的std::thread,POSIX下的pthread等,都是以函数加其参数之 ...
- jrtplib移植
jrtplib版本:3.11.1 jthread版本:1.3.3 libsrtp版本:1.6.0 jrtplib库有两种编译方式: 1. 使能jthread编译,此方式可使jrtplib自动在后台轮询 ...
- vue.js 图表chart.js使用
在使用这个chart.js之前,自己写过一个饼图,总之碰到的问题不少,所以能用现成的插件就用,能节省不少时间 这里不打算介绍chart.js里面详细的参数意义和各个参数的用法,只作为首次使用chart ...
- 22.VUE学习之-replice删除当前评论条数
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- Flask学习笔记:数据库迁移操作flask-script+alembic/flask-migrate
数据库迁移是将代码中模型类(即表)的修改同步到数据库中, flask-sqlalchemy的模型类一旦使用create_all()映射到数据库中后,对这个模型类的修改(例如添加了一个新的字段)就不会再 ...