zoukankan      html  css  js  c++  java
  • 【LG P3853】路标设置

    路标设置

    解析

    我们把公路上相邻路标的最大距离定义为该公路的“空旷指数”。

    求增设路标后能达到的最小“空旷指数”值。

    这两句明确的暗示了这题能使用二分答案。

    再想一想,“空旷指数”越大越容易做到,满足单调性,可以用二分。

    对于每次的 ( ext{mid}),由于路标不可移动,那么我们只要考虑两个路标之间的距离,如果超出了 ( ext{mid}) 就要考虑增加路标了。

    增加路标时就是从一个路标开始,距离每有一个 ( ext{mid}),就加一个路标,直到下一个路标。

    此外注意几个小细节:

    1.如果两路标之间的的距离正好是 ( ext{mid}) 的倍数,要减去正好和最后一个路标重合的路标 。

    2.二分板子不要写错了,注意小细节。

    代码

    #include<bits/stdc++.h>
    using namespace std;
    const int MAXN=100005;
    int a[MAXN],L,n,k;
    int check(int mid) {
    	int m=0;
    	for(int i=2; i<=n; i++) {
    		if(a[i]-a[i-1]>=mid) {
    			m+=(a[i]-a[i-1])/mid;
    			if((a[i]-a[i-1])%mid==0) {
    				m--;
    			}
    		}
    	}
    	if(m>k) {
    		return 0;
    	}
    	return 1;
    }
    int main() {
    	scanf("%d %d %d",&L,&n,&k);
    	for(int i=1; i<=n; i++) {
    		scanf("%d",a+i);
    	}
    	sort(a+1,a+n+1);
    	int l=0,r=L;
    	while(l<r) {
    		int mid=(l+r)/2;
    		if(check(mid)==1) {
    			r=mid;
    		} else {
    			l=mid+1;
    		}
    	}
    	printf("%d",l);
    	return 0;
    }
    

    知识共享许可协议

    本作品采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可。

    限于本人水平,如果文章有表述不当之处,还请不吝赐教。

  • 相关阅读:
    Android SDK镜像的介绍使用
    如何在使用MAMP环境下安装MySQLdb
    MySQL – 导出数据成csv
    CSV
    自己写的一个Yeoman的Generator-Require-Angularjs
    笔记
    PHP
    Intellij IDEA 14的注册机
    nodejs
    Python
  • 原文地址:https://www.cnblogs.com/Sam2007/p/14852786.html
Copyright © 2011-2022 走看看