zoukankan      html  css  js  c++  java
  • BZOJ 3203 Sdoi2013 保护出题人 凸包+三分

    题目大意:太长自己看
    sumi表示第i个僵尸以及之前的僵尸的体力总和。disi表示第i个僵尸与房屋的初始距离
    我们发现我们能消灭一个僵尸当且仅当y>=sumidisi
    那么我们要求的显然就是max{sumidisi}
    我们将一个僵尸抽象成一个点sumidisi。那么我们发现每一个回合僵尸之间的相对位置是不变的
    因此我们能够维护一个凸包。三分就可以

    #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;
    }
  • 相关阅读:
    重力感应GSensor 方向介绍
    php图片保存、下载
    AJAX技术在PHP开发中的简单应用
    php 面向对象基础
    用PHP处理多个同名复选框
    去掉codeigniter地址中的index.php
    PHP中如何运用ini_set和ini_get()
    Windows 7下PHP配置环境
    zend_application 说明
    PHP写的域名查询系统whois
  • 原文地址:https://www.cnblogs.com/gcczhongduan/p/5127812.html
Copyright © 2011-2022 走看看