zoukankan      html  css  js  c++  java
  • P2381 圆圆舞蹈

    题意:一个圆,上面有n头牛(卧槽)

       给出相邻两头牛顺时针的距离

       问两只最远的牛的距离(min(顺时针距离,逆时针距离))

    最远距离一定$le$距离和/2

    先求个前缀和

    那么问题转化为:找到

    $s_j-s_i<(dis/2)$的最大的$s_j-s_i$

    我们可以发现,只要枚举了i,j,时间复杂度不可能$le n^2$

    变个形$s_j<s_i+(dis/2)$

    而且s是递增的!!upperbound!

    #include<cstdio>
    #include<iostream>
    #include<cstring>
    #include<cctype>
    #include<algorithm>
    using namespace std;
    #define int long long
    #define olinr return
    #define _ 0
    #define love_nmr 0
    #define DB double
    inline int read()
    {
        int x=0,f=1;
        char ch=getchar();
        while(!isdigit(ch))
        {
            if(ch=='-')
                f=-f;
            ch=getchar();
        }
        while(isdigit(ch))
        {
            x=(x<<1)+(x<<3)+(ch^48);
            ch=getchar();
        }
        return x*f;
    }
    inline void put(int x)
    {
        if(x<0)
        {
            x=-x;
            putchar('-');
        }
        if(x>9)
            put(x/10);
        putchar(x%10+'0');
    }
    int n;
    int tot;
    int s[105050];
    int d[105050];
    int ans;
    signed main()
    {
        n=read();
        for(int i=1;i<=n;i++)
            s[i]=s[i-1]+(d[i]=read());
        tot=s[n]>>1;
        for(int i=1;i<=n;i++)
        {
            int pos=upper_bound(s+1,s+n+1,tot+s[i])-s-1;
            ans=max(ans,s[pos]-s[i]);
        }
        put(ans);
        olinr ~~(0^_^0)+love_nmr;
    }
  • 相关阅读:
    JS正则表达式
    TortoiseGit 中文汉化
    java之 Mybatis框架
    正向代理和反向代理
    Java基础之 多线程
    python库参考学习网址
    postman进行https接口测试所遇到的ssl证书问题,参考别人方法
    hbase单机搭建
    搭建单机版伪分布zookeeper集群
    搭建hadoop单机版
  • 原文地址:https://www.cnblogs.com/olinr/p/9583608.html
Copyright © 2011-2022 走看看