木材加工(裸二分题)(附二分算法粗略介绍)

看到旁边的学弟也在做二分,就手贱2分钟打了一道奇(sha)特(bi)二分题。

原题传送门

好吧,做这道题是为了给新手一个教程

首先我们聊聊二分。

二分利用的也是分治思想

不懂分治思想的可以看看我归并做的那道火柴排队。

传送门

首先要了解一下二分的性质(也就是什么题目要用二分来写、)

我们假设一个题目,如果一个数a能够满足题意,并且U=[数值最小值/数值最大值(看题意)~a]中的数就一定能够满足题意。

那么这道题目就能用来二分。。

或者说一道题目的解的解集为U,如0<i<a;题目的范围是0<i<l;已知l>a;要我们求a的值

那么这道题目就能用来二分。、

好吧,好想还是很复杂。

还是贴代码比较稳妥。

简单一句话来说,就是答案具有单调性的题目可以用来二分。。(单调性等我开始做单调队列的时候再来填坑。。)

下面贴原题代码。。主程序相当于模板啦233~

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int n,k,a[10001];
bool check(int x)
{
    int ans=0;
    for(int i=1;i<=n;i++)
    ans+=a[i]/x;
    return ans>=k;
}
int main(){
    int maxn=0;
    scanf("%d%d",&n,&k);
    for(int i=1;i<=n;i++)
    {
        scanf("%d",&a[i]);
        if(maxn<a[i])maxn=a[i];
    }
    int l=1,r=maxn;
    int ans=0;
    while(l<=r)
    {
        int mid=(l+r)>>1;
        if(!check(mid))r=mid-1; else ans=mid,l=mid+1;
    }
    printf("%d\n",ans);
} 
时间: 2024-10-13 02:03:33

木材加工(裸二分题)(附二分算法粗略介绍)的相关文章

二分查找的相关算法题

最近笔试经常遇到二分查找的相关算法题 1)旋转数组中的最小数字 2)在旋转数组中查找某个数 2)排序数组中某个数的出现次数 下面我来一一总结 1 旋转数组的最小数字 题目:把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转.输入一个递增排序的数组的一个旋转,输出旋转数组的最小元素.例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1. 实现数组的旋转见左旋转字符串. 和二分查找法一样,用两个指针分别指向数组的第一个元素和最后一个元素. 我们注意到旋转

hdu Courses 1083 二分匹配 ,匈牙利算法。。水题

Courses Time Limit: 20000/10000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 4233    Accepted Submission(s): 2014 Problem Description Consider a group of N students and P courses. Each student visits zero, one or

HDU 1150:Machine Schedule(二分匹配,匈牙利算法)

Machine Schedule Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 5371    Accepted Submission(s): 2658 Problem Description As we all know, machine scheduling is a very classical problem in compu

POJ 3014:Asteroids(二分匹配,匈牙利算法)

Asteroids Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 14399   Accepted: 7836 Description Bessie wants to navigate her spaceship through a dangerous asteroid field in the shape of an N x N grid (1 <= N <= 500). The grid contains K as

『嗨威说』算法设计与分析 - 算法第二章上机实践报告(二分查找 / 改写二分搜索算法 / 两个有序序列的中位数)

本文索引目录: 一.PTA实验报告题1 : 二分查找 1.1 实践题目 1.2 问题描述 1.3 算法描述 1.4 算法时间及空间复杂度分析 二.PTA实验报告题2 : 改写二分搜索算法 2.1 实践题目 2.2 问题描述 2.3 算法描述 2.4 算法时间及空间复杂度分析 三.PTA实验报告题3 : 两个有序序列的中位数 3.1 实践题目 3.2 问题描述 3.3 算法描述 3.4 算法时间及空间复杂度分析 四.实验心得体会(实践收获及疑惑) 一.PTA实验报告题1 : 二分查找 1.1 实践

《机器学习实战》之二分K-均值聚类算法的python实现

<机器学习实战>之二分K-均值聚类算法的python实现 上面博文介绍了K-均值聚类算法及其用python实现,上篇博文中的两张截图,我们可以看到,由于K-均值聚类算法中由于初始质心的选取,会造成聚类的局部最优,并不是全局最优,因此,会造成聚类的效果并不理想,为克服K-均值算法收敛于局部最小值的问题,就有了二分K-均值算法. 二分K-均值聚类算法 二分K均值算法是基本K均值算法的直接扩充,其基本思想是:为了得到K个簇,首先将所有点的集合分裂成两个簇,然后从这些簇中选取一个继续分裂,迭代直到产生

HDU 2063:过山车(二分匹配,匈牙利算法)

过山车 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 9745    Accepted Submission(s): 4294 Problem Description RPG girls今天和大家一起去游乐场玩,终于可以坐上梦寐以求的过山车了.可是,过山车的每一排只有两个座位,而且还有条不成文的规矩,就是每个女生必须找个个男生做par

java 二分查找 - 折半查找算法

二分查找: 这个算法是比较简单的,容易理解的.这个算法是对有序的数组进行查找,所以想要使用这个算法那么 首先先要对数组进行排序. 其实有三个指针,开始指针,末尾指针,中间指针,来开始.折半查找. 步骤如下: 1.确定三个指针,start,end,middleIndex. 2.判断start<=end,如果满足,就执行这个方法,不满足,就返回,找不到. 3.在2的前提下,我们对其折半查找,middleIndex = start+end >> 1,取中间值. 4.判断中间位置的值和目标值是否

CodeForces 474B Worms (水题,二分)

题意:给定 n 堆数,然后有 m 个话询问,问你在哪一堆里. 析:这个题是一个二分题,但是有一个函数,可以代替写二分,lower_bound. 代码如下: #include<bits/stdc++.h> using namespace std; typedef long long LL; const int maxn = 1e5 + 5; int a[maxn]; int main(){ int n, m; cin >> n; for(int i = 1; i <= n; +