• luogu P1316 丢瓶盖 |二分答案


    题目描述

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

    输入格式

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

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

    输出格式

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


    一道练习二分的经典例题

    #include<iostream>
    #include<cstdio>
    #include<algorithm>
    #define ll long long
    using namespace std;
    ll f[100001];ll a,b;
    bool check(ll x)
    {
    	ll ans=0,last=-(1<<30);
    	for(int i=1;i<=a;i++)
    	{
    		if(f[i]-last>=x)
    		{
    		//	cout<<i<<" ";
    			last=f[i];
    			ans++;
    			if(ans>=b)return 1;
    		}
    	}
    	return 0;
    }
    int main()
    {
    	cin>>a>>b;
    	ll ansmax=0;
    	for(int i=1;i<=a;i++)
    	{
    		scanf("%lld",&f[i]);
    		ansmax=max(ansmax,f[i]);
    	}
    
    	sort(f+1,f+a+1);
    	ll l=0,r=ansmax+1;
    	ll ans=0;
    	while(l<=r)
    	{
    		ll mid=(l+r)/2;
    		if(check(mid))
    		{
    			l=mid+1;
    			ans=max(ans,mid);
    		}
    		else 
    		r=mid-1;
    	}
    	cout<<ans;
    }
    
  • 相关阅读:
    分享50个漂亮的设计师个人作品集网站案例
    Jquery中$.get(),$.post(),$.ajax(),$.getJSON()的用法总结
    ajax异步请求
    angularJS(6)
    angularJS(5)
    PHP实现RTX发送消息提醒
    ajax异步请求
    angularJS(4)
    angularJS(3)
    jsPanel插件Option总结
  • 原文地址:https://www.cnblogs.com/naruto-mzx/p/11846810.html
Copyright © 2020-2023  润新知