P3853 [TJOI2007]路标设置

传送门

思路:

  类似于数列分段的二分查找答案。设目前的 mid 是一个最小的“空旷指数”,那么在 sum 数组(路标数组)里每两个相邻间的路标距离一定要小于等于目前的 mid , 如果大于,那就必须使用一些路标去填补这个距离。

  两个路标之间距离大于 mid 又要分为两种情况:①两路标之间距离不能整除 mid ,则要放置 ( sum [ i+1 ] -sum [ i ] )/mid 个路标。②如果两路标之间距离能够整除 mid 则所放置的路标数要 -1 。

  每一次二分判断 mid 距离是否满足 cnt ≤ k :①如果≤, 则 mid 的距离可以再缩小;②如果>,则 mid 的距离要放大。

AC代码:

#include<iostream>
#include<algorithm>
#include<cstdio>
#include<cmath>
#include<cstring>
#include<string>
#include<cstdlib>
#include<queue>
#include<vector>
#include<deque>
#include<stack>
#include<map>
#include<set>
using namespace std;
#define maxn 100100
long long sum[maxn],l,r,mid,cnt;//cnt记录在mid条件下,所需的路标数
long long len,n,k;
inline long long read()
{
    long long kr=1,xs=0;
    char ls;
    ls=getchar();
    while(!isdigit(ls))
    {
        if(ls==‘-‘)
        kr=-1;
        ls=getchar();
    }
    while(isdigit(ls))
    {
        xs=(xs<<1)+(xs<<3)+(ls^48);
        ls=getchar();
    }
    return kr*xs;
}
inline bool check(long long u)
{
    cnt=0;
    for(long long i=1;i<=n+1;i++)
    {
        if(sum[i]-sum[i-1]>u)//如果两个路标之间的距离大于mid
        {
            cnt+=(sum[i]-sum[i-1])/u;//所需的路标数增加
            if((sum[i]-sum[i-1])%u==0)//如果能够整除
                cnt--;//路标数 -1
        }
    }
    if(cnt<=k) return true;
    return false;
}
int main()
{
    len=read();n=read();k=read();
    for(long long i=1;i<=n;i++)
        sum[i]=read();
    sum[0]=0;sum[n+1]=len;
    l=0;r=sum[n];
    while(l<r)
    {
        mid=l+r>>1;
        if(check(mid))
            r=mid;
        else l=mid+1;
    }//日常二分
    printf("%lld\n",l);//l为最终的mid
return 0;
}

原文地址:https://www.cnblogs.com/lck-lck/p/9692099.html

时间: 2024-07-30 03:54:50

P3853 [TJOI2007]路标设置的相关文章

luogu P3853 [TJOI2007]路标设置 |二分

题目背景 B市和T市之间有一条长长的高速公路,这条公路的某些地方设有路标,但是大家都感觉路标设得太少了,相邻两个路标之间往往隔着相当长的一段距离.为了便于研究这个问题,我们把公路上相邻路标的最大距离定义为该公路的"空旷指数". 题目描述 现在政府决定在公路上增设一些路标,使得公路的"空旷指数"最小.他们请求你设计一个程序计算能达到的最小值是多少.请注意,公路的起点和终点保证已设有路标,公路的长度为整数,并且原有路标和新设路标都必须距起点整数个单位距离. 输入格式 第

题解 P3853 【[TJOI2007]路标设置】

#include<bits/stdc++.h> using namespace std; int l,r,len,n,k,maxx,a[100005]; //通过计算可以发现 对一个给定的距离len而言 中间分成若干个长度不大于x的段的个数为 len/x 如果len为x的倍数 则为len/x-1 bool check(int x){ int tmp=0; for (int i=2;i<=n;i++){ tmp+=(a[i]-a[i-1])/x; if ((a[i]-a[i-1])%x==

二分答案 [TJOI2007]路标设置

本人水平有限,题解不到为处,请多多谅解 本蒟蒻谢谢大家观看 题目:https://www.luogu.org/problem/P3853 因为数据n<=10000000;通过样例分析即可得出这是一到二分题. 样例解析:将一段区间分成(k+n)段,找出(k+n)的一段最大值.因为k不确定,所以如何分也不确定,我们就是要找出这段最大值在整个若干次情况中与其余一段最大值比较,取这些里面最小的. 本题是一道二分答案的模板题,只需注意一下细节即可 code: #include<bits/stdc++.h

基础算法总结

位运算 算术位运算 包括:按位与(&).按位或(|).按位异或(^).按位取反(~).按位左移(<<).按位右移(>>) 1 &(and) 对两个数进行操作,然后返回一个新的数,这个数的每个位都需要两个输入数的(同一位)都为1时才为1 举个例子: 1 1 1 1 1 0 0 0 1 1 1 0 =0 0 1 1 1 0 2 |(or) 比较两个数,然后返回一个新的数,这个数的每一位设置1的条件是两个输入数的同一位都不为0(即任意一个为1,或都为1) 举个例子: 1

洛谷 P3853 解题报告

P3853 路标设置 题目背景 B市和T市之间有一条长长的高速公路,这条公路的某些地方设有路标,但是大家都感觉路标设得太少了,相邻两个路标之间往往隔着相当长的一段距离.为了便于研究这个问题,我们把公路上相邻路标的最大距离定义为该公路的"空旷指数". 题目描述 现在政府决定在公路上增设一些路标,使得公路的"空旷指数"最小.他们请求你设计一个程序计算能达到的最小值是多少.请注意,公路的起点和终点保证已设有路标,公路的长度为整数,并且原有路标和新设路标都必须距起点整数个单

2013.5.A

+ ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 题1 高低位交换 [问题描述]     给出一个小于2^32的正整数.这个数可以用一个32位的二进制数表示(不足32位用0补足).我们称这个二进制数的前16位为"高位",后16位为"低位".将它的高低位交换,我们可以得到一个新的数.试问这个新的数是多少(用十进制表示).     例如,数1314520用二进制表示为0000 0000 0001 0100 0000 1110 1101

静态路由表设置以及路由汇总相关知识

随着宽带接入的普及,很多家庭和小企业都组建了局域网来共享宽带接入.而且随着局域网规模的扩大,很多地方都涉及到2台或以上路由器的应用.当一个局域网内存在2台以上的路由器时,由于其下主机互访的需求,往往需要设置路由.由于网络规模较小且不经常变动,所以静态路由是最合适的选择. 本文作为一篇初级入门类文章,会以几个简单实例讲解静态路由,并在最后讲解一点关于路由汇总(归纳)的知识.由于这类家庭和小型办公局域网所采用的一般都是中低档宽带路由器,所以这篇文章就以最简单的宽带路由器为例.(其实无论在什么档次的路

项目与技术路标

运维岗项目 一:可行性分析(需求分析)二:实际操作过程用到了什么技术,遇到了什么问题,怎么解决的三:怎么做,这样做带来的好处 全新项目: 部署AMP/NMP/AMT架构: 1.使用rpm包逐个主机进行安装及部署: 2.使用编译源代码的方式逐个主机进行安装及部署: 3.使用运维工具(如:ansible)在各个主机上安装rpm包并部署: 部署Nagios/Cacti/Zabbix监控系统: 1.使用rpm包逐个主机进行安装及部署: 2.使用运维工具(如:ansible)在各个主机上安装rpm包并部署

linux下Nginx配置文件(nginx.conf)配置设置详解(windows用phpstudy集成)

linux备份nginx.conf文件举例: cp /usr/local/nginx/nginx.conf /usr/local/nginx/nginx.conf-20171111(日期) 在进程列表里 面找master进程,它的编号就是主进程号. ps -ef | grep nginx 查看进程 cat /usr/local/nginx/nginx.pid 每次修改完nginx文件都要重新加载配置文件linux命令: /usr/local/nginx -t //验证配置文件是否合法 若ngin