博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
BZOJ 3203 凸包+三分
阅读量:5146 次
发布时间:2019-06-13

本文共 1218 字,大约阅读时间需要 4 分钟。

思路:

iwtwiioi大爷题解:http://www.cnblogs.com/iwtwiioi/p/4007263.html

注意是四舍五入

//By SiriusRen#include 
using namespace std;typedef long long ll;const int N=1000500;ll n,d,a[N],X[N],sum[N],top;struct Point{ll x,y;}point[N],q[N],ask;double Ans,ans;Point operator-(Point a,Point b){ Point c;c.x=a.x-b.x,c.y=a.y-b.y;return c;}double cross(Point a,Point b,Point c){ a=a-c,b=b-c;return a.x*b.y-a.y*b.x;}int main(){ scanf("%lld%lld",&n,&d); for(int i=1;i<=n;i++){ scanf("%lld%lld",&a[i],&X[i]); sum[i]=sum[i-1]+a[i]; point[i].x=d*i,point[i].y=sum[i-1]; } for(int i=1;i<=n;i++){ while(top>1&&cross(point[i],q[top],q[top-1])>=0)top--; q[++top]=point[i]; ask.x=X[i]+d*i,ask.y=sum[i]; int l=1,r=top,lmid,rmid; while(r-l>=3){ lmid=l+(r-l)/3,rmid=r-(r-l)/3; double k1=(double)(q[lmid].y-ask.y)/(q[lmid].x-ask.x); double k2=(double)(q[rmid].y-ask.y)/(q[rmid].x-ask.x); if(k2>k1)l=lmid; else r=rmid; }ans=0; for(int i=l;i<=r;i++)ans=max(ans,(double)(q[i].y-ask.y)/(q[i].x-ask.x)); Ans+=ans; } printf("%.0lf\n",Ans);}

 

转载于:https://www.cnblogs.com/SiriusRen/p/6908839.html

你可能感兴趣的文章
性能优化的 ULBOX(收集-)
查看>>
NYOJ 212 K尾相等数
查看>>
transform属性
查看>>
列表 -- 增删改查(切片)
查看>>
【模板】堆排序
查看>>
DNS练习之正向解析
查看>>
[Leetcode][JAVA] LRU Cache
查看>>
硬件UDP读数AsynUdpClient
查看>>
本周内容
查看>>
sublime dockerfile 语法高亮
查看>>
InputStream、InputStreamReader和Reader的关系
查看>>
js兼容公用方法
查看>>
如何将应用完美迁移至Android P版本
查看>>
【转】清空mysql一个库中的所有表的数据
查看>>
基于wxPython的python代码统计工具
查看>>
淘宝JAVA中间件Diamond详解(一)---简介&快速使用
查看>>
一种简单的数据库性能测试方法
查看>>
如何给JavaScript文件传递参数
查看>>
Hadoop HBase概念学习系列之物理视图(又名为物理模型)(九)
查看>>
Hadoop HBase概念学习系列之HBase里的宽表设计概念(表设计)(二十七)
查看>>