• P1316 丢瓶盖


    题目描述

    陶陶是个贪玩的孩子,他在地上丢了A个瓶盖,为了简化问题,我们可以当作这A个瓶盖丢在一条直线上,现在他想从这些瓶盖里找出B个,使得距离最近的2个距离最大,他想知道,最大可以到多少呢?

    输入输出格式

    输入格式:

    第一行,两个整数,A,B。(B<=A<=100000)

    第二行,A个整数,分别为这A个瓶盖坐标。

    输出格式:

    仅一个整数,为所求答案。

    输入输出样例

    输入样例#1: 复制
    5 3
    1 2 3 4 5
    
    输出样例#1: 复制
    2
    

    说明

    限时3秒

    思路:贪心 + 二分

    judge()函数判断输入是否合法, 再用二分来估计题目要求的最大值

    #include<iostream>
    #include<algorithm>
    using namespace std;
    const int MAX = 100010;
    const int INF = 0x7fffffff;
    
    int a[MAX], n, m;
    
    bool judge(long long x)
    {
    	int num = 1, count = 1;
    	for(int i = 2; i <= n; ++i)
    	{
    		if(a[i] - a[num] >= x)
    		{
    			count++;
    			num = i;
    		}
    	}
    	if(count >= m)
    		return true;
    	else
    		return false;
    }
    
    int main()
    {
    	int left, right, mid, ans;
    	cin >> n >> m;
    	for(int i = 1; i <= n; ++i)
    		cin >> a[i];
    	sort(a + 1, a + n+ 1);
    	left = 0, right = a[n] - a[1];//注意左端点从0开始!!!!!!
    	while(left <= right)
    	{
    		mid = left + (right - left) / 2;
    		if(judge(mid))
    		{
    			left = mid + 1;
    			ans = mid;
    		}
    		else
    		{
    			right = mid - 1;
    		}
    	}
    	cout << ans << endl;
    	return 0;
    } 
    

      

  • 相关阅读:
    CSP-S全国模拟赛第三场 【nan死了】
    ●SCOI2018 AFO
    ●洛谷P2934 [USACO09JAN]安全出行Safe Travel
    ●洛谷P3233 [HNOI2014]世界树
    ●洛谷P2495 [SDOI2011]消耗战
    ●UOJ58 [WC2013]糖果公园
    ●洛谷P1903 [国家集训队]数颜色
    ●BZOJ 4237 稻草人
    ●Joyoi Normal
    ●CodeForces 698C LRU
  • 原文地址:https://www.cnblogs.com/mjn1/p/10276242.html
Copyright © 2020-2023  润新知