二分
文章平均质量分 83
ModestCoder_
一个modest的coder
展开
-
【题解】LuoGu1083:借教室
原题传送门不能满足的方案满足二分性二分枚举什么时候无法满足然后O(n)O(n)O(n)用差分算出每天需要的教师数量进行判断Code:#include <bits/stdc++.h>#define maxn 1000010#define LL long longusing namespace std;int n, m;LL a[maxn], b[maxn], d[maxn], s[maxn], t[maxn];inline int read(){ int s = 0, w原创 2020-12-03 20:17:06 · 170 阅读 · 0 评论 -
【题解】AT4520:[AGC032E] Modulo Pairing
原题传送门首先想到的当然是二分答案+贪心但是正解二分的并不是答案结论:最终的正确答案一定存在一个分界点,满足蓝线表示x+y<Mx+y<Mx+y<M红线表示x+y>=Mx+y>=Mx+y>=M给出证明情况1:任意两个数加起来都<M<M<M的情况,Ⅰ最优令从左到右分别为a<b<c<da<b<c<da<b<c<d计算出三种方案的价值Ⅰ:max(a+d,b+c)max(a+d,b+c原创 2020-11-01 11:32:11 · 229 阅读 · 0 评论 -
【题解】AT4502:[AGC029C] Lexicographic constraints
原题传送门首先想到类似进制或是全排列一样的操作假如k=3k=3k=3可以11111111112111311311212113221112112可以总结出一些规律若ai>ai−1a_i>a_{i-1}ai>ai−1,就直接在si−1s_{i-1}si−1的末尾补1,补到当前长度为止若ai=ai−1a_i=a_{i-1}ai=ai−1,sis_isi就是si−1s_{i-1}si−1的下一个排列若ai<ai−1a_i<a_{i原创 2020-10-30 21:05:22 · 210 阅读 · 0 评论 -
【题解】AT4501:[AGC029B] Powers of two
原题传送门手玩数据以5为例00000101比5大的最小的能和5匹配的是11(00001011)再大,就是00011011001110110111101111111011……再假如1000001010与之匹配可以是00010110(22)00110110(54)0111011011110110……结论,对于一个数xxx,另一个数y>=xy>=xy>=xx+y=2px+y=2^px+y=2pyyy一定是xxx最后一位1不动,之前全部取反,然后最原创 2020-10-30 20:07:04 · 128 阅读 · 0 评论 -
【题解】CF1175C:Electrification
原题传送门二分最优值,然后O(n)O(n)O(n)验证对于每个iii,就是看[i,i+k][i,i+k][i,i+k]这段区间能不能达到这个最优值就是[ai+k−ai+12]<=mid[\frac{a_{i+k}-a_i+1}{2}]<=mid[2ai+k−ai+1]<=mid,可行的话,答案就是[ai+k+ai+12][\frac{a_{i+k}+a_i+1}{2}][2ai+k+ai+1]Code:#include <bits/stdc++.h>#d原创 2020-10-19 09:16:35 · 213 阅读 · 0 评论 -
【题解】CF993D:Compute Power
原题传送门01分数规划∑a∑b<=mid\frac{\sum a}{\sum b}<=mid∑b∑a<=mid∑a<=mid∗∑b\sum a<=mid*\sum b∑a<=mid∗∑bwi=ai−mid∗biw_i=a_i-mid*b_iwi=ai−mid∗bi问是否存在∑wi<=0\sum w_i<=0∑wi<=0先根据aaa从大到小分组,相同的aaa一组,组内按照bbb升序这样满足严格小于的那个条件可以dpi,jdp_{i原创 2020-09-20 11:12:24 · 200 阅读 · 0 评论 -
【题解】LuoGu4951:[USACO01OPEN]Earthquake
原题传送门01分数规划f−∑cx∑tx=ans\frac{f-\sum c_x}{\sum t_x}=ans∑txf−∑cx=ansf−∑cx−∑tx∗ans=0f-\sum c_x-\sum t_x*ans=0f−∑cx−∑tx∗ans=0f>=∑cx+∑tx∗ansf>=\sum c_x+\sum t_x*ansf>=∑cx+∑tx∗ans二分答案midmidmid,将边权赋为cx+tx∗midc_x+t_x*midcx+tx∗mid求最小生成树,总边权和原创 2020-09-05 21:07:53 · 206 阅读 · 0 评论 -
【题解】LuoGu6142:[USACO20FEB]Delegation P
原题传送门跟赛道修建很像的一道题目不同的是,现在要全选依然二分答案,然后dfsdfsdfs对于某点的所有儿子里面传上来的链,二分出能和自己组成一条链的往上传,剩下的是通过两两贪心组合判断可行性注意两个点,若有偶数条链,加一条长度为0的链;根节点直接判断可行性Code:#include <bits/stdc++.h>#define maxn 100010using namespace std;struct Edge{ int to, next;}edge[maxn <原创 2020-09-04 21:15:20 · 219 阅读 · 0 评论 -
【题解】NOIp模拟:比赛
比赛Description有两个队伍A和B,每个队伍都有n个人。这两支队伍之间进行n场1对1比赛,每一场都是由A中的一个选手与B中的一个选手对抗。同一个人不会参加多场比赛,每个人的对手都是随机而等概率的。例如A队有A1和A2两个人,B队有B1和B2两个人,那么(A1 vs B1,A2 vs B2)和(A1 vs B2,A2 vs B1)的概率都是均等的50%。每个选手都有一个非负的实力值。如果实力值为X和Y的选手对抗,那么实力值较强的选手所在的队伍将会获得(X-Y)^2的得分。求A的得分减B的得分的原创 2020-08-26 13:58:04 · 377 阅读 · 0 评论 -
【题解】NOIp模拟:四轮车
在地图上散落着 n 个车轮,小 J 想用它们造一辆车。要求如下:一辆车需要四个车轮,且四个车轮构成一个正方形车轮不能移动你需要计算有多少种造车的方案(两个方案不同当且仅当所用车轮不全相同,坐标相同的两个车轮视为不同车轮)。30%的数据保证 n ≤ 30100%的数据保证 1 ≤ n ≤ 1000; |x|, |y| < 20000O(n2)O(n^2)O(n2)枚举两个点,计算出另外两个点,用二分求出另外两个点的方案数,用乘法原理乘起来,最终要除以2Code:#include原创 2020-08-25 13:35:57 · 251 阅读 · 0 评论 -
【题解】CF883I:Photo Processing
原题传送门先排个序最大值最小,用二分然后用dp验证dpidp_idpi表示当前到iii,最后一个分组是否可以以iii结尾dpi∣=dpj−1(j<i,ai−aj<=mid)dp_i|=dp_{j-1}(j<i,a_i-a_j<=mid)dpi∣=dpj−1(j<i,ai−aj<=mid)但是这个是O(n2)O(n^2)O(n2)的,可以优化发现对于一对(i,j)(i>j)(i,j)(i>j)(i,j)(i>j),若[j,i][j,原创 2020-08-20 16:24:19 · 185 阅读 · 0 评论 -
【题解】LuoGu3853:[TJOI2007]路标设置
原题传送门二分+贪心对于两个路标l,rl,rl,r,之间最少放r−l−1mid\frac{r-l-1}{mid}midr−l−1个Code:#include <bits/stdc++.h>#define maxn 100010using namespace std;int a[maxn], L, n, k;inline int read(){ int s = 0, w = 1; char c = getchar(); for (; !isdigit(c); c = ge原创 2020-08-09 18:38:23 · 153 阅读 · 0 评论 -
【题解】LuoGu4047: [JSOI2010]部落划分
原题传送门二分答案,然后用类似kruskalkruskalkruskal的方法验证把n2n^2n2条边从小到大排序,加边对于每个midmidmid,如果两点之间距离x<midx<midx<mid,那么这两个点必须是同一部落的;如果两点之间距离x>=midx>=midx>=mid,那么这两点可以不同部落所以就看看哪些x<midx<midx<mid的边必须加,因为要划分成kkk个部落,所以一共要加n−kn-kn−k条边Code:#include原创 2020-08-08 12:34:47 · 148 阅读 · 0 评论 -
【题解】LuoGu5815:[CQOI2010]扑克牌
原题传送门二分+贪心目标是组出midmidmid副牌,所以有两个要求JOKERJOKERJOKER不能不够JOKERJOKERJOKER最多用midmidmid张Code:#include <bits/stdc++.h>#define maxn 110#define int long longusing namespace std;int n, m, a[maxn];inline int read(){ int s = 0, w = 1; char c = get原创 2020-08-07 12:22:00 · 146 阅读 · 0 评论 -
【题解】LuoGu4343:[SHOI2015]自动刷题机
原题传送门这里不能直接二分答案可不可行发现随着nnn变大,切题数是递减的,可以二分切题数于目标的关系二分两遍分别求出两个答案Code:#include <bits/stdc++.h>#define maxn 100010#define LL long longusing namespace std;int n, k;LL a[maxn];inline int read(){ int s = 0, w = 1; char c = getchar(); for (; !原创 2020-08-06 12:49:31 · 166 阅读 · 0 评论 -
【题解】LuoGu5368: [PKUSC2018]真实排名
原题传送门冷静分析了一下,貌似很可做的样子数据范围告诉我要用一个O(nlogn)O(nlogn)O(nlogn)的做法对于每个数aia_iai,可以分类讨论,是否把这个数翻倍aia_iai不翻倍,[ai+12,ai−1][\frac{a_i+1}{2},a_i-1][2ai+1,ai−1]也不能翻倍,剩下的数假设有xxx个,答案为CxkC_{x}^{k}Cxkaia_iai...原创 2019-12-08 15:57:32 · 264 阅读 · 0 评论 -
【题解】LuoGu1083:借教室
原题传送门刚开始我想到了差分方法可以O(n)O(n)O(n)检验是否所有订单均可满足然后我就想到这道题是否和飞扬的小鸟一样的套路再去用什么方法找到第一个不能满足的点发现答案满足二分性,那么就直接二分好了,然后每次都用差分数组O(n)checkO(n)\text{check}O(n)check把所有均可满足的情况一并包括进二分一起做Code:#include <bits/stdc...原创 2019-11-14 09:17:03 · 181 阅读 · 0 评论 -
【题解】BZOJ4326:NOIP2015 运输计划【二分+LCA+树上差分】
题目描述公元 2044 年,人类进入了宇宙纪元。L 国有 n 个星球,还有 n?1 条双向航道,每条航道建立在两个星球之间, 这 n?1 条航道连通了 L 国的所有星球。小 P 掌管一家物流公司, 该公司有很多个运输计划,每个运输计划形如 :有一艘物流飞船需要从 ui 号星球沿最快的宇航路径飞行到 vi 号星球去。显然,飞船驶过一条航道是需要时间 的,对于航道 j,任意飞船驶过它所花费的...原创 2018-08-01 19:46:46 · 328 阅读 · 0 评论 -
[题解]LuoGu2698: [USACO12MAR]花盆Flowerpot
原题传送门这道题在洛谷难度为蓝题(提高+省选-)个人认为难度普及+够了吧不难想到单调队列的做法,首先二分答案,对于每个花盆宽度,我们进行O(n)的验证维护两个单调队列,分别维护纵坐标的最小值与最大值,从左往右枚举横轴坐标,每个时刻都能计算出题目里说的时间差D,与输入的进行比较,若满足要求,则返回trueCode:/*q1维护最小值,q2维护最大值*/#include <bi...原创 2019-03-06 19:05:17 · 262 阅读 · 0 评论 -
【题解】LuoGu5021/NOIp2018:赛道修建
原题传送门蓝题难度吧?怎么上升到紫题了?考场里,作为一个真·蒟蒻,自然是没想到打满分的,于是疯狂打子任务,于是乎,我把四个子任务都打了。m=1m=1m=1, 也就是求直径,比赛时我还不知道树的直径这种东西,于是我写了个树形dp,那部分的分数应该拿到了ai=1a_i=1ai=1, 也就是菊花图,想到一条赛道最多由两条边组成(根据菊花图的特点),考虑使用二分+头尾指针移动贪心解决,这部分现...原创 2019-04-06 16:05:11 · 314 阅读 · 0 评论 -
【题解】LuoGu4403:[BJWC2008]秦腾与教学评估
原题传送门小思维难度核心思想:奇偶性注意到要么无解,要么有且仅有一解(人数为奇)想到二分用一个calc(i)calc(i)calc(i)函数计算“前缀和”,就是点1到点i人数之和,可以O(n)O(n)O(n)得到然后就是针对这个前缀和的分类讨论calc(maxr)calc(maxr)calc(maxr) modmodmod 2==02==02==0,无解calc(mid)calc...原创 2019-07-09 21:38:56 · 144 阅读 · 0 评论 -
【题解】慈溪中学-8.15-T1
传送门二分,枚举答案如果验证是否能给mid个充电器都充电那当然是给更安全的充电器充电然后对于每个充电器是否能充电,总是先尽可能插插线板,然后充电Code:#include <bits/stdc++.h>#define maxn 400010#define LL long longusing namespace std;int n, m, a[maxn], b[max...原创 2019-08-16 08:05:04 · 229 阅读 · 0 评论 -
【题解】CF875E:Delivery Club
原题传送门二分答案+贪心对于每个midmidmid,需要倒着做,贪心我们记当前其中一个快递员在xi+1x_{i+1}xi+1,另一个快递员在[l,r][l,r][l,r],当前那么分类讨论...原创 2019-08-12 19:07:22 · 478 阅读 · 0 评论 -
【题解】CF760B:Frodo and pillows
原题传送门还是挺好做的吧首先可以想到二分答案想一想枕头个数如何分配最好,自然是呈现金字塔形式分配即k号床最多,旁边两个床少一个,再旁边少两个……check就是直接数学计算一下,用等差数列求和,注意一下细节处理Code:#include <bits/stdc++.h>#define LL long longusing namespace std;LL n, m, k;...原创 2019-08-23 11:52:21 · 213 阅读 · 0 评论 -
【题解】CF460C:Present
原题传送门最小值最大当然是二分答案然后O(n)O(n)O(n)扫,如果当前数未达到midmidmid,就加到midmidmid,并且这个数是作为区间左端点的如何实现区间加法,差分数组就行了Code:#include <bits/stdc++.h>#define maxn 1000010#define LL long longusing namespace std;LL...原创 2019-09-08 21:27:52 · 321 阅读 · 0 评论 -
【题解】CF567D:One-Dimensional Battle Ships
原题传送门直接模拟的话比较麻烦,可能需要用上一些数据结构之类的但是这道题目不需要数据结构,直接二分即可先把坐标排序,二分答案,checkcheckcheck里面计算可以放多少船ididid小于midmidmid的断点是合理的对于一段区间[l,r][l,r][l,r],可以放[r−l+1a+1][\frac{r-l+1}{a+1}][a+1r−l+1]条船Code:#include ...原创 2019-09-22 10:45:13 · 272 阅读 · 0 评论 -
【题解】LuoGu4105:[HEOI2014]南园满地堆轻絮
原题传送门二分+贪心不解释Code:#include <bits/stdc++.h>#define maxn 5000010#define LL long longusing namespace std;LL a[maxn], n, sa, sb, sc, sd, qy, b[maxn], ans;LL F(LL x){ return sa * x % qy * x ...原创 2019-10-07 21:14:30 · 177 阅读 · 0 评论