BZOJ 3203 Sdoi2013 保护出题人 凸包+三分
2016-01-13 17:00
232 查看
题目大意:太长自己看
令sumisum_i表示第ii个僵尸以及之前的僵尸的体力总和。disidis_i表示第ii个僵尸与房屋的初始距离
我们发现我们能消灭一个僵尸当且仅当y>=sumidisiy>=\frac{sum_i}{dis_i}
那么我们要求的显然就是max{sumidisi}max\{\frac{sum_i}{dis_i}\}
我们将一个僵尸抽象成一个点sumidisi\frac{sum_i}{dis_i}。那么我们发现每一个回合僵尸之间的相对位置是不变的
因此我们能够维护一个凸包。三分就可以
令sumisum_i表示第ii个僵尸以及之前的僵尸的体力总和。disidis_i表示第ii个僵尸与房屋的初始距离
我们发现我们能消灭一个僵尸当且仅当y>=sumidisiy>=\frac{sum_i}{dis_i}
那么我们要求的显然就是max{sumidisi}max\{\frac{sum_i}{dis_i}\}
我们将一个僵尸抽象成一个点sumidisi\frac{sum_i}{dis_i}。那么我们发现每一个回合僵尸之间的相对位置是不变的
因此我们能够维护一个凸包。三分就可以
#include <cstdio> #include <cstring> #include <iomanip> #include <iostream> #include <algorithm> #define M 100100 #define EPS 1e-7 using namespace std; typedef long double ld; struct Point{ ld x,y; Point() {} Point(ld _,ld __): x(_),y(__) {} friend ld Get_Slope(const Point &p1,const Point &p2) { return (p1.y-p2.y)/(p1.x-p2.x); } }O,stack[M];int top; int n; long long d,a[M],sum[M]; ld ans; void Insert(const Point &p) { while( top>=2 && Get_Slope(stack[top-1],stack[top]) >= Get_Slope(stack[top],p) - EPS ) top--; stack[++top]=p; } ld Trisection() { int i,l=1,r=top; while(r-l>=3) { int l_mid=(l+l+r)/3,r_mid=(l+r+r)/3; ld _l=Get_Slope(stack[l_mid],O); ld _r=Get_Slope(stack[r_mid],O); if(_l>_r) r=r_mid; else l=l_mid; } ld re=0; for(i=l;i<=r;i++) re=max(re,Get_Slope(stack[i],O)); return re; } int main() { int i; long long x; cin>>n>>d; for(i=1;i<=n;i++) { #ifdef PoPoQQQ scanf("%I64d%I64d",&a[i],&x); #else scanf("%lld%lld",&a[i],&x); #endif sum[i]=sum[i-1]+a[i]; Insert(Point(i*d,sum[i-1])); O=Point(i*d+x,sum[i]); ans+=Trisection(); } cout<<fixed<<setprecision(0)<<ans<<endl; return 0; }
相关文章推荐
- SASS用法指南
- spring and hibernate mixed
- Win7下JDK环境变量的配置
- httpClient post WebAPI
- 小随笔:Context共用
- iOS 百度地图_大头针点击_区别点击哪个_点击效果改变
- Java集合框架GS Collections详解
- 编写Qt Designer自定义控件(一)——如何创建并使用Qt自定义控件(一共4篇文章)
- 第二章 基于JAX-WS开发Web services
- Sass用法指南_20151109笔记
- Win7-64位系统中VC++ 6.0打开文件崩溃解决办法
- 代码控制UI,View
- 三行情书
- eclipce 快捷键
- 协议方法每次点击tabBar回到根视图
- ABA问题及避免
- App性能测试
- C#值类型以及默认值记录下
- Weblogic在Linux下启动特别慢及进入控制台慢的解决方法
- 基础知识__WebService