• [TJOI2007]路标设置


    题目

    Description

    B市和T市之间有一条长长的高速公路,这条公路的某些地方设有路标,但是大家都感觉路标设得太少了,相邻两个路标之间往往隔着相当长的一段距离。为了便于研究这个问题,我们把公路上相邻路标的最大距离定义为该公路的“空旷指数”。

    现在政府决定在公路上增设一些路标,使得公路的“空旷指数”最小。他们请求你设计一个程序计算能达到的最小值是多少。请注意,公路的起点和终点保证已设有路标,公路的长度为整数,并且原有路标和新设路标都必须距起点整数个单位距离。

    Input

    第1行包括三个数L、N、K,分别表示公路的长度,原有路标的数量,以及最多可增设的路标数量。

    第2行包括递增排列的N个整数,分别表示原有的N个路标的位置。路标的位置用距起点的距离表示,且一定位于区间[0,L]内。

    Output

    输出1行,包含一个整数,表示增设路标后能达到的最小“空旷指数”值。

    Sample Input

    6 2
    5 1
    3 6
    2 4
    2 1
    3 2
    1
    2
    3
    4
    5
    6

    Sample Output

    15
    21
    16
    10
    8
    11

    思路

    一道二分的题目;

    二分每个空旷指数,然后检查,为满足在这个空旷指数内 放置的路标 是否大于k;

    代码

    #include<bits/stdc++.h>
    #define re register
    typedef long long ll;
    using namespace std;
    inline ll read()
    {
        ll a=0,f=1; char c=getchar();
        while (c<'0'||c>'9') {if (c=='-') f=-1; c=getchar();}
        while (c>='0'&&c<='9') {a=a*10+c-'0'; c=getchar();}
        return a*f;
    }//好用的快读
    ll L,n,k;
    ll a[100010];
    inline ll check(ll x)
    {
        ll sum=0;
        for(ll i=1;i<=n;i++)
        if(a[i]-a[i-1]>x)//这段路必须大于 空旷指数 才放路标 
        {
            ll num=a[i]-a[i-1];
            if(num/x>k)
                return 0;
            sum+=num/x;
            if(num%x==0)//如果刚好分配 num/x 段一样的路段,
                       //需要摆放的路标就是 num/x -1; 
                sum--; 
            if(sum>k)
                return 0;
        }
        return 1;
    }
    int main()
    {
        L=read();n=read();k=read();
        for(ll i=1;i<=n;i++)
            a[i]=read();
        ll ans=1<<30;
        ll l=0,r=L;
        while(l<=r)
        {
            ll mid=(l+r)>>1;
            if(check(mid))
            {
                ans=min(ans,mid);
                r=mid-1;
            }
            else
                l=mid+1;
        }//二分板子 
        printf("%lld
    ",ans);
    }
  • 相关阅读:
    什么时候应该使用C#的属性
    Unicode和字符集小结
    C#编译器怎么检查代码是否会执行
    C#中如何操作2个list
    用Windbg来看看CLR的JIT是什么时候发生的
    bzoj-1579: [Usaco2009 Feb]Revamping Trails 道路升级
    次小生成树
    bzoj-3687: 简单题
    bzoj-3669: [Noi2014]魔法森林
    uva 11732 (trie树)
  • 原文地址:https://www.cnblogs.com/wzx-RS-STHN/p/13414597.html
Copyright © 2020-2023  润新知