蓝桥杯打卡:二分

文章介绍了在处理数据限制在1e5级别的二分查找问题时,作者提供了一种简单且灵活的模板,并分享了在省赛中的应用实例,包括修改模板以适应特定问题。
摘要由CSDN通过智能技术生成

做了两题二分发现数据限制都在1e5,以后可以尝试用数据推方法

二分模版 指路不需要考虑mid+1、mid-1的二分查找模板,希望大家都能学会_mid-1 mid+1-CSDN博客

感恩大佬简单方便的模版

int L=-1,R=n;
while(L+1!=R)
{
	int mid=L+R>>1;
	if(check()) L=mid;
	else R=mid;
	//最后根据你所分左右两边区间的结果
	//选取L或者R作为结果
}

但是我在2017-省赛题目中用这个模版是有一组数据过不了的 改成了R=n+1就可以了

2.扫地机器人 - 蓝桥云课 (lanqiao.cn)icon-default.png?t=N7T8https://www.lanqiao.cn/problems/199/learning/?page=1&first_category_id=1&second_category_id=3&tags=%E4%BA%8C%E5%88%86&status=2

#include <iostream>
#include <algorithm>
using namespace std;
int a[100005];
int Min; int n,k;
bool check(int mid)
{
  int sweep=0;
  for(int i=1;i<=k;i++)
  {
    if(a[i]-mid<=sweep)
    {
      if(a[i]<=sweep)
      sweep=mid-1+a[i];
      else
      sweep+=mid;
    }
    else
    return false;
  }
  return sweep>=n;
}
int main()
{

 cin>>n>>k;
 for(int i=1;i<=k;i++)
 cin>>a[i];
sort(a+1,a+k+1);

   int l=-1,r=n+1;
 while(l+1!=r)
 {
   int mid=(l+r)/2;
   if(check(mid))
   {
     r=mid;
     Min=mid;
   }
   else
   {
     l=mid;
   }
 }
 cout<<(Min-1)*2;
  return 0;
}

同样的经过测试 修改的模版也可以在2019-省赛 题中通过所有样例  1.分巧克力 - 蓝桥云课 (lanqiao.cn)icon-default.png?t=N7T8https://www.lanqiao.cn/problems/99/learning/?page=1&first_category_id=1&second_category_id=3&tags=%E4%BA%8C%E5%88%86&status=2

#include <iostream>
using namespace std;
int h[100005], w[100005];
int n, k, ans;
bool check(int mid)
{
    int kk = 0;
    for (int i = 1; i <= n; i++)
    {
        kk += (h[i] / mid) * (w[i] / mid);
    }
    if (kk >= k)
        return true;
    else
        return false;
}
int main()
{

    cin >> n >> k;
    for (int i = 1; i <= n; i++)
    {
        cin >> h[i] >> w[i];
    }

    int l = -1, r = 100001;
    int mid;
    while (l+1 != r)
    {
        mid = (l + r) / 2;
        if (check(mid))
        {
            l = mid ;
            ans = mid;
        }
        else
        {
            r = mid ;
        }
    }
    cout << ans;
    return 0;
}

  • 14
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值