首页 > 其他分享 >分巧克力 | 二分

分巧克力 | 二分

时间:2023-04-03 23:59:10浏览次数:41  
标签:二分 巧克力 false int ios mid cin include

 

 

P8647 [蓝桥杯 2017 省 AB] 分巧克力 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)

一图说清下述两种代码孰对孰错的原因:

 

 

错误代码:

#include<iostream>
#include<algorithm>
#include<cmath>
using namespace std;
#define ios_base \
    ios::sync_with_stdio(false);\
    cin.tie(nullptr),cout.tie(nullptr)
const int N =1e5+10;
int n,k,t1,t2=3e6;          //***
int h[N],w[N];
bool check(int mid);
int main()
{
    ios_base;
    cin>>n>>k;
    for (int i = 0; i < n; i++)
    {
        cin>>h[i]>>w[i];
        t1=min(h[i],w[i]);  //***
        t2=min(t2,t1);      //***
    }
    int l=1,r=t2;//***
    while (l<r)
    {
        int mid=l+r+1>>1;//如果tle多半是此处写错,作+1修正即可(mid=l+r+1>>1)
        if(check(mid))
        {
            l=mid;
        }
        else r=mid-1;
    }
    cout<<r;
    return 0;
}
bool check(int mid)
{
    int num=0;//num表示在巧克力边长为mid的情况下能分给多少个小朋友
    for (int i = 0; i < n; i++)
    {
        num+=(h[i]/mid)*(w[i]/mid);
        if (num>=k) return true;
    }
    return false;
}

 

正确代码:

#include<iostream>
#include<algorithm>
#include<cmath>
using namespace std;
#define ios_base \
    ios::sync_with_stdio(false);\
    cin.tie(nullptr),cout.tie(nullptr)
const int N =1e5+10;
int n,k;
int h[N],w[N];
bool check(int mid);
int main()
{
    ios_base;
    cin>>n>>k;
    for (int i = 0; i < n; i++)
    {
        cin>>h[i]>>w[i];
    }
    int l=1,r=5e6;                    
    while (l<r)
    {
        int mid=l+r+1>>1;//如果tle多半是此处写错,作+1修正即可(mid=l+r+1>>1)
        if(check(mid))
        {
            l=mid;
        }
        else r=mid-1;
    }
    cout<<r;
    return 0;
}
bool check(int mid)
{
    int num=0;//num表示在巧克力边长为mid的情况下能分给多少个小朋友
    for (int i = 0; i < n; i++)
    {
        num+=(h[i]/mid)*(w[i]/mid);
        if (num>=k) return true;
    }
    return false;
}

 

标签:二分,巧克力,false,int,ios,mid,cin,include
From: https://www.cnblogs.com/shinnyblue/p/17284962.html

相关文章

  • POJ 2773 Happy 2006 二分+容斥原理(二进制枚举或dfs)
    Happy2006TimeLimit: 3000MS MemoryLimit: 65536KTotalSubmissions: 14003 Accepted: 4946DescriptionTwopositiveintegersaresaidtoberelativelyprimetoeachotheriftheGreatCommonDivisor(GCD)is1.Forinstance,1,3,5,7,9...areallrelativel......
  • 从二分搜索到二叉搜索树
    引言打算写写树形数据结构:二叉查找树、红黑树、跳表和B树。这些数据结构都是为了解决同一个基本问题:如何快速地对一个大集合执行增删改查。本篇是第一篇,讲讲搜索树的基础:二叉搜索树。基本问题如何在一千万个手机号中快速找到13012345432这个号(以及相关联信息,如号主姓名)?......
  • 二分查找(算法笔记)
    核心代码(循环):intf=-1;while(left<=right){intmid=(left+right)/2;if(a[mid]==key){f=mid;break;}if(key<a[mid])right=mid-1;if(key>a[mid])left=mid+1;}if(f==-1)cout<<“没找到”elsecout<<f<<endl......
  • 浮点数二分(数的三次方)(银行贷款)
    //数的三次方(给出浮点数n)//AcWing790#include<stdio.h>doublen;intmain(){scanf("%lf",&n);doublel=-100,r=100;while(r-l>1e-8){doublemid=(l+r)/2;if(mid*mid*mid<=n)......
  • 二分查找
    #include<stdio.h>#defineN100010intn,q;intarray[N];//N的范围来确定数组开的范围(0,n],开的范围要比n大,10//第一次出现位置intnum_1(intq[],intlen,intx){intl=-1,r=len;while(l+1<r){intmid=(l+r)/2;......
  • 分巧克力(二分法)
    题目描述儿童节那天有K位小朋友到小明家做客。小明拿出了珍藏的巧克力招待小朋友们。小明一共有N块巧克力,其中第i块是Hi×Wi的方格组成的长方形。为了公平起见,小明需要从这N块巧克力中切出K块巧克力分给小朋友们。切出的巧克力需要满足:形状是正方形,边长是整数;......
  • 二分查找变形
    packagetest;importjava.util.Arrays;publicclassN172{ publicstaticvoidmain(String[]args){ int[]a={1,34,4,4,5,4,6,2345,0}; Arrays.......
  • 整体二分总结
    整体二分总结整体二分,就是一种高效离线处理可二分答案的询问的方法,可以代替例如树套树这种高级数据结构。例题:1.P1527[国家集训队]矩阵乘法题意:多次询问,求子矩阵第\(k......
  • 二分法
    关于二分法:二分法使用要求待查找的数据集必须有序二分法的缺陷针对开头结尾的数据查找效率很低常见算法的原理以及伪代码二分法、冒泡、快拍、插入、堆排、桶排、数......
  • 2023.3.28 【模板】KM算法 | 二分图最大权完美匹配
    2023.3.28【模板】KM算法|二分图最大权完美匹配题目概述给定一张二分图,左右部均有\(n\)个点,共有\(m\)条带权边,且保证有完美匹配。求一种完美匹配的方案,使得最终......