二分算法(蓝桥杯 C++ 题目 代码 注解)

news2024/11/17 0:51:46

目录

模板:

题目一(分巧克力): 

代码:

 题目二(M次方根):

​编辑代码: 

题目三(跳石头):

代码: 

 题目四(扫地机器人):

代码:

模板:

while (low < high)//在递增序列中查找>=x的数中最小的一个
{
	int mid = (low + high) / 2;
	if (a[mid] >= x)
		high = mid;
	else
		low = mid + 1;
}

while (low < high)//在递增序列中查找<=x的数中最大的一个
{
	int mid = (low + high) / 2;
	if (a[mid] <= x)
		low = mid;
	else
		high = mid - 1;
}

题目一(分巧克力): 

代码:

#include<iostream>
using namespace std;
int n,k,h[100010],w[100010];
bool pd(int l)//分l边长的巧克力是否满足
{
  int sum=0;
  for(int i=1;i<=n;i++)//判断可以分几块
  {
    sum+=(h[i]/l)*(w[i]/l);
    if(sum>=k)//满足分大于等于k个人,返回true
       return true;
  }
  return false;
}
int main()
{
    cin>>n>>k;
    for(int i=1;i<=n;i++)
        cin>>h[i]>>w[i];
    int high=0;
    for(int i=1;i<=n;i++)//查找二分上界
    {
      high=max(high,h[i]);
      high=max(high,w[i]);
    }
    int low=1,mid=0;
    while(low<high)//二分查找
    {
      mid=(low+high+1)/2;
      if(pd(mid))
        low=mid;
      else
        high=mid-1;
    }
    cout<<low;
}

 题目二(M次方根):


代码: 

#include<iostream>
#include<iomanip>
using namespace std;
double n,m,l,r,mid;
double eps=1e-8;//因为计算保留七位小数,则每次加10负8次方
bool pd(double a,double d)
{
  double c=1;
  while(d>0)//c的d次方
  {
    c*=a;
    d--;
  }
  if(c>=n)
  return true;
  else
  return false;
}
int main()
{
    cin>>n>>m;
    l=0,r=n;
    while(l+eps<r)//二分查找
    {
      mid=(l+r)/2;
      if(pd(mid,m))
        r=mid;
      else
        l=mid;
    }
    cout<<fixed<<setprecision(7)<<l<<endl;//输出七位小数

}

题目三(跳石头):

代码: 

#include <iostream>
using namespace std;
int l, n, m, mid;
int stone[500010];
bool check(int d)//判断距离d是否合适
{
    int num = 0, pos = 0;//num记录搬走的石头,pos当前站立的石头
    for (int i = 1; i <= n; i++)
    {
        if (stone[i] - pos < d)//第i块石头需要搬走
            num++;//搬走石头数加一
        else
            pos = stone[i];//否则,位置站到该位置
    }
    if (num <= m)
        return true;
    else
        return false;
}
int main()
{
    cin >> l >> n >> m;
    for (int i = 1; i <= n; i++)
        cin >> stone[i];
    int low = 0, high = l, ans;
    while (low < high)//二分查找
    {
        mid = (low + high + 1) / 2;
        if (check(mid))
        {
            low = mid;
            ans = mid;
        }
        else
            high = mid - 1;
    }
    cout << ans;
}

 题目四(扫地机器人):

代码:

#include<iostream>
#include<algorithm>
using namespace std;
int pos[1000010];
int n, k,mid;
bool check(int len)//每个机器扫len个区域
{
    int tmp = 0;//表示扫到的位置
    for (int i = 1; i <= k; i++)
    {
        if (pos[i] - len <= tmp)//如果当前机器人扫它的左边是比其它机器人省时间的,所以如果能够清扫完左边还没扫的,说明方案有可能可行
        {
            if (pos[i] <= tmp)//如果当前机器人已经处于扫过的位置,则机器人只扫右侧区域
                tmp = pos[i] + len - 1;
            else//否则从上一次扫到的位置开始扫
                tmp += len;
        }
        else
            return 0;//方案不可行
    }
    return tmp >= n;//全部扫完,方案可行
}
int main()
{
    cin >> n >> k;
    for (int i = 1; i <= k; i++)
        cin >> pos[i];
    sort(pos + 1, pos + k + 1);//机器人位置从小到大排序
    int l = 0, r = n, ans;
    while (l <= r)//二分查找,每个机器人扫的距离,最小0,最大n
    {
        mid = (l + r) / 2;
        if (check(mid))
        {
            r = mid - 1;
            ans = mid;//记录最小的答案
        }
        else
            l = mid + 1;
    }
    cout << (ans - 1) * 2 << endl;//时间来回乘2
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1506611.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

LLM RAG系统中消除数据幻觉的几个绝招-OPENAI公司内称的“大招”

前言-什么是数据幻觉&#xff1f;它到底有什么危害呢 我们直接来举例&#xff1a; 我是金银花一区的&#xff0c;附近有什么小学&#xff1f; 此时RAG带出如下信息&#xff1a; 金银花小区一区、二区、三区附近教育资源有&#xff1a;银树大学、建设小学金银花校区、金树高…

左偏树,可并堆详解,OJ练习,代码详解

文章目录 一、左偏树的定义和性质1.1优先队列的定义1.2可并堆的定义1.3左偏树1.3.1左偏树的定义1.3.2左偏树的性质1.3.3左偏树的合并操作1.3.3.1合并操作流程1.3.3.2合并操作的代码实现 1.4左偏树OJ练习1.4.1模板1.4.1.1原题链接1.4.1.2思路分析1.4.1.3AC代码 1.4.2P1552 [APIO…

C++的类与对象(五):赋值运算符重载与日期类的实现

目录 比较两个日期对象 运算符重载 赋值运算符重载 连续赋值 日期类的实现 Date.h文件 Date.cpp文件 Test.cpp文件 const成员 取地址及const取地址操作符重载 比较两个日期对象 问题描述&#xff1a;内置类型可直接用运算符比较&#xff0c;自定义类型的对象是多个…

【Leetcode每日一刷】滑动窗口:209.长度最小的子数组

一、209.长度最小的子数组 1.1&#xff1a;题目 题目链接 1.2&#xff1a;解题思路 题型&#xff1a;滑动窗口&#xff1b;时间复杂度&#xff1a;O(n) &#x1faa7; 滑动窗口本质也是双指针的一种技巧&#xff0c;特别适用于字串问题 ❗❗核心思想/ 关键&#xff1a;左右…

简洁的链式思维(CCoT)提示

原文地址&#xff1a;Concise Chain-of-Thought (CCoT) Prompting 传统的CoT导致了输出令牌使用的增加&#xff0c;而CCoT提示是一种旨在减少LLM响应的冗长性和推理时间的提示工程技术。 2024 年 1 月 24 日 Areas where Chain-Of-Thought-like methodology has been introd…

RabbitMQ - 07 - 通过注解创建队列和交换机

之前消息模型的实现,都是通过rabbitMQ Management 控制台来手动创建 queue 和 exchange 的 在项目开发中有两种方式通过代码声明 创建 一种是通过 Bean 方式,这种代码量较大 稍繁琐 一种是通过注解的方式声明 先编写消费者代码 通过注解绑定了 消息队列,交换机,还有 routin…

24 深度卷积神经网络 AlexNet【李沐动手学深度学习v2课程笔记】(备注:含AlexNet和LeNet对比)

目录 1. 深度学习机器学习的发展 1.1 核方法 1.2 几何学 1.3 特征工程 opencv 1.4 Hardware 2. AlexNet 3. 代码 1. 深度学习机器学习的发展 1.1 核方法 2001 Learning with Kernels 核方法 &#xff08;机器学习&#xff09; 特征提取、选择核函数来计算相似性、凸优…

Python爬虫打印状态码为521,返回数据为乱码?

爬虫代码&#xff1a; import requests headers {User-Agent:Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/107.0.0.0 Safari/537.36,Referer:https://www1.rmfysszc.gov.cn/projects.shtml?dh3&gpstate1&wsbm_slt1} …

Java 中的 File 类常用方法介绍

Java 中的 File 类是 java.io 包的一部分&#xff0c;它提供了丰富的文件操作方法。File 类可以用来表示文件和目录路径名的抽象表示形式&#xff0c;即它可以用来获取文件或目录的属性&#xff0c;也可以用来创建、删除、重命名文件和目录。下面是一些常用的 File 类方法&…

双体系Java学习之程序流程控制及选择结构

程序流程控制 选择结构 package struct;import java.util.Scanner;public class IfDemo01 {public static void main(String[] args) {Scanner scanner new Scanner(System.in);System.out.println("请输入内容&#xff1a;");String s scanner.nextLine();//判断字…

elasticsearch篇

1.初识elasticsearch 1.1.了解ES 1.1.1.elasticsearch的作用 elasticsearch是一款非常强大的开源搜索引擎&#xff0c;具备非常多强大功能&#xff0c;可以帮助我们从海量数据中快速找到需要的内容 例如&#xff1a; 在电商网站搜索商品 在百度搜索答案 在打车软件搜索附近…

鸿蒙Harmony应用开发—ArkTS声明式开发(通用属性:动态属性设置)

动态设置组件的属性&#xff0c;支持开发者在属性设置时使用if/else语法&#xff0c;且根据需要使用多态样式设置属性。 说明&#xff1a; 从API Version 11开始支持。后续版本如有新增内容&#xff0c;则采用上角标单独标记该内容的起始版本。 attributeModifier attributeMo…

AI Vtuber一款聚合了多种大模型技术的虚拟主播

大家好&#xff0c;笔者荒生&#xff0c;今天调研了一款比较不错的开源项目AI-Vtuber&#xff0c;和大家一起分享。 AI-Vtuber是一款数字人虚拟直播软件&#xff0c;聚合了多种多种市面主流大模型技术&#xff0c;可谓牛得一逼。包括&#xff1a;支持ChatGPT、Claude、ChatGLM…

C语言学习--练习4(二维数组)

目录 1.统计有序数组中的负数 2.矩阵对角线元素和 3.最富有客户的资产总量 4.托普利兹矩阵 5.矩阵中的幸运数 6.二进制矩阵中的特殊位置 7.岛屿的周长 1.统计有序数组中的负数 //直接遍历二维数组即可 int countNegatives(int** grid, int gridSize, int* gridColSize) …

20240310-2-数组(Array)

数组&#xff08;Array&#xff09; 面试中最常见的就是围绕数组进行出题&#xff0c;主要原则数组可以随机读取&#xff0c;一般遇到数组相关的题目&#xff0c;都不是直观看到的那样。第一步暴力解法&#xff0c;第二步是否可以排序&#xff0c;是否可以二分&#xff0c;是否…

【Linux】线程封装_互斥

欢迎来到Cefler的博客&#x1f601; &#x1f54c;博客主页&#xff1a;折纸花满衣 &#x1f3e0;个人专栏&#xff1a;题目解析 &#x1f30e;推荐文章&#xff1a;【LeetCode】winter vacation training 目录 &#x1f449;&#x1f3fb;线程封装Thread.cpp &#x1f449;&am…

给 spyter/all-spark-notebook 添加scala支持

spyter/all-spark-notebook默认没有安装scala notebook&#xff0c;需要手动添加。 你可以创建一个新的 Dockerfile&#xff0c;在其中添加你需要的配置和组件。以下是一个简单的例子&#xff1a; FROM jupyter/all-spark-notebook:x86_64-ubuntu-22.04 #冒号后可以是latest&a…

Masked Generative Distillation(MGD)2022年ECCV

Masked Generative Distillation&#xff08;MGD&#xff09;2022年ECCV 摘要 **目前的蒸馏算法通常通过模仿老师的输出来提高学生的表现。本文表明&#xff0c;教师还可以通过引导学生特征恢复来提高学生的代表性。从这个角度来看&#xff0c;我们提出的掩模生成蒸馏&#x…

扩展学习|系统理解数字经济

文献来源&#xff1a;[1]肖静华,胡杨颂,吴瑶.成长品&#xff1a;数据驱动的企业与用户互动创新案例研究[J].管理世界,2020,36(03):183-205.DOI:10.19744/j.cnki.11-1235/f.2020.0041. [2]陈晓红,李杨扬,宋丽洁等.数字经济理论体系与研究展望[J].管理世界,2022,38(02):208-22413…

微信小程序跳转到其他小程序

有两种方式&#xff0c;如下&#xff1a; 一、appid跳转 wx.navigateToMiniProgram({appId: 目标小程序appid,path: 目标小程序页面路径,//不配的话默认是首页//develop开发版&#xff1b;trial体验版&#xff1b;release正式版envVersion: release, success(res) {// 打开成功…