随笔分类 - 二分/三分
摘要:题意:有一$n$个数,从中找数构成相同的子集,要求子集元素个数为$k$,求构成子集个数最多的情况,输出子集(字典序最小). 题解:我们可以对子集的个数二分答案,首先用桶记录每个元素的个数,然后二分找最大值,check函数中直接枚举$[1,100000]$的个数,然后用$mid$去除,得到的$t$就是
阅读全文
摘要:题意:在二维坐标轴上给你一堆点,在x轴上找一个点,使得该点到其他点的最大距离最小. 题解:随便找几个点画个图,不难发现,答案具有凹凸性,有极小值,所以我们直接三分来找即可. 代码: int n; long double x[N],y[N]; long double check(long double
阅读全文
摘要:题意:有$n$件衣服,每件衣服都有$a_$滴水,所有衣服每分钟都能自然烘干$1$滴水,或者用烘干机,每分钟可以烘干$k$滴水,问最快多少分钟可以使所有衣服都烘干. 题解:这题和之前的那个拔苗助长感觉一样啊....都是二分答案. 先把$a$排个序,然后左区间$l=1$,右区间$r=a[n-1]$,
阅读全文
摘要:题意:有三个正整数$x,y,n$,再$1$~$n$中找一个最大的数$k$,使得$k\ mod\ x=y$. 题解:先记$tmp=n/x$,再判断$tmp*x+y$的值是否大于$n$,如果是,直接输出$(tmp-1)x+y$,否则输出$tmpx+y$. ps:这题好像可以直接二分搞 代码: int t
阅读全文
摘要:题意:有$n$袋爆米花,某个队伍有$c$个队员,每个队员每秒做多可以吃$t$粒爆米花,但一袋爆米花只能由一个队员吃完,并且一个队员只能吃连续的一袋或几袋,不能隔着吃某一袋,求将所有爆米花吃完的最少时间. 题解:这道题当时想了半天,发现怎么也求不出答案,后来想到了二分答案的办法,将答案代入并模拟题意判
阅读全文
摘要:题意:一年有$n$个月,每月有$d_$天,找出连续的$x$天,使得这$x$天的日期总和最大,任意一年都能选. 题解:首先要先贪心,得到:连续的$x$天的最后一天一定是某个月的最后一天,我们先预处理两个前缀和,分别记录连续的天数和总日期数,然后枚举,二分找出一个区间,得出这个区间的总日期数再加上区间最
阅读全文
摘要:题意:有个$n$个公寓,每个公寓$a_$代表着编号为$1-a_$个房间,给你房间号,问它在第几栋公寓的第几个房间. 题解:对每个公寓的房间号记一个前缀和,二分查找属于第几个公寓,然后求个差即可. 代码: #include <iostream> #include <cstdio> #include <
阅读全文
摘要:题意:给你$n$个数,每次可以使某个数++,--,或使某个数--另一个++,分别消耗$a,r,m$.求使所有数相同最少的消耗. 题解:因为答案不是单调的,所以不能二分,但不难发现,答案只有一个峰,所以我们可以三分高度,然后写个check函数贪心一下即可. 代码: #include <iostream
阅读全文
摘要:题意:有一个长度为$n$的数组,从第一天开始,第$i$天可以使$i$位置上的数$+1$,当$i=n$时,下次从$i=1$再开始,另外,在每天结束时,你可以使任意一个位置上的数$+1;or;-1$,或者不变,求最少经过多少天可以使得每个位置上的数都相等. 题解:我们对天数进行二分,由中位数定理:数列中
阅读全文

浙公网安备 33010602011771号