首页 > 其他分享 >第八届蓝桥杯赛题 分巧克力(用二分法实现)

第八届蓝桥杯赛题 分巧克力(用二分法实现)

时间:2023-12-12 17:47:25浏览次数:32  
标签:蓝桥 巧克力 int mid 二分法 杯赛 小朋友

今日一道编程题  第八届蓝桥杯赛题中的分巧克力问题(用二分法实现)

问题描述如下:

儿童节那天有K位小朋友到小明家做客。小明拿出了珍藏的巧克力招待小朋友们。小明一共有N块巧克力,其中第i块是Hi x Wi的方格组成的长方形。为了公平起见,小明需要从这 N 块巧克力中切出K块巧克力分给小朋友们。切出的巧克力需要满足:

  1. 形状是正方形,边长是整数  

  2. 大小相同 

  例如一块6x5的巧克力可以切出6块2x2的巧克力或者2块3x3的巧克力。当然小朋友们都希望得到的巧克力尽可能大,你能帮小明计算出最大的边长是多少么?

输入格式:

第一行包含两个整数N和K。(1 <= N, K <= 100000) 以下N行每行包含两个整数Hi和Wi。(1 <= Hi, Wi <= 100000)  输入保证每位小朋友至少能获得一块1x1的巧克力。

输出格式:

输出切出的正方形巧克力最大可能的边长。

以下是我的解题思路:

用二分法实现:

#include<bits/stdc++.h>
using namespace std;
int n, k;
int h[100010], w[100010];
bool check(int d) {
    int num = 0;
    for (int i = 0; i < n; i++)
        num += (h[i] / d) * (w[i] / d);
    if (num >= k) return true;    //够分
    else       return false;   //不够分
}
int main() {
    cin >> n >> k;
    for (int i = 0; i < n; i++)   cin >> h[i] >> w[i];
 
    int L = 1, R = 100010;
 
    while (L < R) {
        int mid = (L + R + 1) >> 1;   //除2,向右取整
        if (check(mid))
            L = mid;  //新的搜索区间是右半部分,所以R不变,调整L=mid;
        else
            R = mid - 1; //新的搜索区间是左半部分,所以L不变,调整R=mid–1。
    }
    cout << L;
 
    return 0;
}

 

标签:蓝桥,巧克力,int,mid,二分法,杯赛,小朋友
From: https://www.cnblogs.com/tianpeisen/p/17897410.html

相关文章

  • P8805 [蓝桥杯 2022 国 B] 机房
    原题链接前情提要题目不难看懂,即求a->b过程中的所有点的延迟和。显然可以暴力遍历一遍完成,但是时间复杂度太高了。改进算法想象这个图是由点和线组成的,把其中一个点提起来,这样就变成了一个树(n叉树),任意两点(a,b)间的延迟和等于a->lca->b,其中lca为ab两点的最近公共祖先这样一来,只......
  • 12.9 蓝桥杯 huffuman树c语言
    今天学习了蓝桥杯的huffuman树,总结如下:问题描述Huffman树在编码中有着广泛的应用。在这里,我们只关心Huffman树的构造过程。给出一列数{pi}={p0,p1,…,pn-1},用这列数构造Huffman树的过程如下:1.找到{pi}中最小的两个数,设为pa和pb,将pa和pb从{pi}中删除掉,然后将它们的和加......
  • P8614 [蓝桥杯 2014 省 A] 波动数列
    这道题的精髓在于DP公式的推理#include<iostream>#include<stdio.h>#include<algorithm>#include<cstring>usingnamespacestd;constintN=1005,mod=100000007;intn,s,a,b;intdp[N*N];intmain(){cin>>n>>s......
  • P8624 [蓝桥杯 2015 省 AB] 垒骰子
    这道题的数据范围比较突出:1<=N<=1e9先写一个O(N)算法:#include<iostream>#include<stdio.h>#include<algorithm>#include<cstring>#defineintlonglongusingnamespacestd;constintmod=1e9+7;intn,m,g[8][8],f[8],op[8],bf[8];......
  • P8623 [蓝桥杯 2015 省 B] 移动距离
    算出两个数字的坐标,然后返回曼哈顿距离。#include<iostream>#include<stdio.h>#include<algorithm>#include<cstring>#include<cmath>usingnamespacestd;intw,m,n,x_m,y_m,x_n,y_n;voidget(intp,int&x,int&y){x=(......
  • 牛顿法、割线法、二分法
    1clear;clc;2%%牛顿法3f=@(x)x^4-4*x^2+4;%函数4df=@(x)4*x^3-8*x;%一阶导数5ddf=@(x)12*x^2-8;%二阶导数6N=1000;%最大迭代次数7x=zeros(N,1);%储存迭代点8x(1)=log(8);%初始点9eps=0.00001;%容许误差1011%迭代过程12fork=2:1:N13x(k)......
  • 《力扣面试150题》题单拓展——二分法
    《力扣面试150题》题单拓展——二分法困难题:找第K大/小1.基础知识首先可以确定答案的上下界单调性分析:如果当前答案为m时,可以满足,一定有一侧是一定满足的,另一侧不一定,需要去探索boolis_ok(){}intl,r;intans;while(l<=r){intm=l+((r-l)>>1);......
  • P8599 [蓝桥杯 2013 省 B] 带分数
    原文链接枚举即可#include<bits/stdc++.h>#definelllonglongusingnamespacestd;ints[14]={0};intmain(){lln;scanf("%lld",&n);for(inti=1;i<=9;i++)s[i]=i;llans=0;do{lla=0,b=0,c=0;fo......
  • 蓝桥杯刷题
    题目:门牌制作-蓝桥云课(lanqiao.cn)sum=0foriinrange(1,2021):s=str(i)sum+=s.count('2');print(sum)题目:卡片-蓝桥云课(lanqiao.cn)importosimportsys#请在此输入您的代码num=0foriinrange(1,100000):num+=str(i).count('1')if(num>......
  • P8706 [蓝桥杯 2020 省 AB1] 解码 ( 入门 ) 题解
    题目传送门思路:有一个原串\(t\)。将原串\(t\)转换成简写字符串\(s\)的规则如下:如果有连续的\(2\sim9\)个相同字母,那么可以将它改为字母+数字的格式。如果是单独的字符,也就是与左右两边的字母都不相同,在简写字符串中一模一样。所以,现在告诉我们简写字符串,要我们求出......