[BZOJ3203]-[Sdoi2013]保护出题人-凸包+三分
来源:互联网 发布:淘宝主图视频制作教程 编辑:程序博客网 时间:2024/06/05 07:29
说在前面
第一次写三分,比想象的要艰辛啊…
因为这道题是在搜索「三分」的时候发现的,于是直接就看到题解了…
不过看题解的时候快要困的睡着了…看半天半懂不懂的….
粗略推导了一下之后就开始写了,于是各种小bug= =
精神状态差的时候果然要拒绝写题!!!
题目
BZOJ3203传送门
题面
懒得打字了=w=,直接粘图岂不美滋滋
输入输出格式
输入格式:
第一行两个空格隔开的正整数n和d,分别表示关数和相邻僵尸间的距离。接下来n行每行两个空格隔开的正整数,第i + 1行为Ai和 Xi,分别表示相比上一关在僵尸队列排头增加血量为Ai 点的僵尸,排头僵尸从距离房子Xi米处开始接近。
输出格式:
一个数,n关植物攻击力的最小总和 ,保留到整数。
解法
由题意,前面的僵尸死了之后,后面的僵尸才能受到伤害,带着这样的时间限制是很难处理的。为了去掉这个限制,可以把后面僵尸的血量加上前面僵尸的血量总和,这样的处理与原题意等价
这样问题就转化成了:有很多僵尸,它们从一开始就受到持续伤害,并且在到达房子之前死掉,询问这个持续伤害的最小值。很明显答案为:
但是
这时候就要靠智商思维了。注意到
下面是自带大常数的代码
这道题需要注意细节…最好想清楚再写
#include <cstdio>#include <cstring>#include <algorithm>using namespace std ;int N , topp ;long long d , A[100005] , X[100005] , sum[100005] ;struct Vector{ double x , y ; Vector(){} ; Vector( double x_ , double y_ ): x(x_) , y(y_){} ;} ;typedef Vector Point ;typedef Vector Vv ;Vv operator - ( const Vv &A , const Vv &B ){ return Vector( A.x - B.x , A.y - B.y ) ;}double Cross( const Vv &A , const Vv &B ){ return A.x * B.y - A.y * B.x ; }Point p[100005] , a[100005] ;double K( int Q , int P ){ return 1.0 * ( sum[P] - p[Q].y ) / ( X[P] + a[P].x - p[Q].x ) ;}double calcu( int now ){ int lf = 1 , rg = topp ; double rt = 0 ; while( rg - lf >= 3 ){ int Lmid = lf + ( rg - lf ) / 3 , Rmid = rg - ( rg - lf ) / 3 ; if( K( Lmid , now ) < K( Rmid , now ) ) lf = Lmid ; else rg = Rmid ; } for( int i = lf ; i <= rg ; i ++ ) rt = max( rt , K( i , now ) ) ; return rt ;}void solve(){ double ans = 0 ; topp = 0 ; for( int i = 1 ; i <= N ; i ++ ){ while( topp >= 2 && Cross( a[i] - p[topp-1] , p[topp] - p[topp-1] ) >= 0 ) topp -- ; p[++topp] = a[i] ; ans += calcu( i ) ; } printf( "%.0f" , ans ) ;}int main(){ scanf( "%d%lld" , &N , &d ) ; for( int i = 1 ; i <= N ; i ++ ){ scanf( "%lld%lld" , &A[i] , &X[i] ) ; sum[i] = sum[i-1] + A[i] ; a[i] = Point( 1.0 * d * i , 1.0 * sum[i-1] ) ; } solve() ;}
- [BZOJ3203][SDOI2013][凸包][三分]保护出题人
- [BZOJ3203]-[Sdoi2013]保护出题人-凸包+三分
- 【bzoj3203】【保护出题人】【凸包+三分】
- 【bzoj3203】[Sdoi2013]保护出题人 凸包+三分法
- 【SDOI2013】【BZOJ3203】保护出题人
- [bzoj3203][SDOI2013]保护出题人
- bzoj3203【SDOI2013】保护出题人
- BZOJ3203 [Sdoi2013]保护出题人
- [bzoj3203][SDOI2013]保护出题人
- BZOJ3203: [SDOI2013]保护出题人
- 【BZOJ】【P3203】【Sdoi2013】【保护出题人】【题解】【凸包+三分】
- BZOJ 3203 Sdoi2013 保护出题人 凸包+三分
- 3203: [Sdoi2013]保护出题人 凸包+三分
- 3203: [Sdoi2013]保护出题人|三分|凸包
- [凸包 三分 数形结合] BZOJ 3203 [Sdoi2013]保护出题人
- [BZOJ]3203 [SDOI2013] 保护出题人 三分
- [Sdoi2013]保护出题人
- 【SDOI2013】保护出题人
- jQuery中data和attr实例
- samba服务器配置
- Hive数学函数
- 碰到的loadrunner问题
- 分治算法
- [BZOJ3203]-[Sdoi2013]保护出题人-凸包+三分
- 浅谈BOM和DOM
- 实验吧 此处无声 writeup
- ECharts柱状图百分比显示
- JS-逻辑运算符&&和||的返回值
- Java---线程
- 计算机网络系列(10)之应用场景Peer-to-peer systems
- 【PHP自学笔记】第十一章 图形图像处理
- MyBatis分页插件-PageHelper的配置与应用(二):即插即用的PageInfo<T>