二分
Ray.C.L
不开longlong见祖宗
展开
-
AcWing 1996. 打乱字母
思路:对每个字符串进行排序,然后把他们分别加入2个集合维护他的最高位和最低位置代码:#include <iostream>#include <cstring>#include <algorithm>#include<string>using namespace std;const int N = 50005;string a[N],b[N],c[N];int main(){ int n; cin>>n; .原创 2022-01-10 11:11:48 · 379 阅读 · 0 评论 -
关押罪犯(二分+染色)
思路:求最大值最小,我们看能不能二分,我们二分出答案ans,然后我们吧大于等于ans的2个人关在不同的监狱,我们通过染色判断这种分配是否可以,如果在答案为ans可以的话,那么就说明可以继续往小划分,如果不选那就只能增大ans。代码:#pragma GCC optimize(2)#include<bits/stdc++.h> using namespace std;typedef long long ll;typedef unsigned long long ull;#defin.原创 2021-02-26 11:45:11 · 101 阅读 · 0 评论 -
单词环(01分数规划,判断正环)
思路:根据题意我们吧前2个字母和后2个字母做一个映射然后建边,边权w为字符串长度,题目要求∑w[i]/∑1\sum w[i]/\sum 1∑w[i]/∑1最大我们二分答案Mid如果mid<ans说明可以继续二分,此时可以得到∑w[i]/∑1−mid>0继而得到∑(w[i]−mid)>0\sum w[i]/\sum 1 -mid>0继而得到\sum(w[i]-mid)>0∑w[i]/∑1−mid>0继而得到∑(w[i]−mid)>0以此判断图中是否有个正环满足该条件.原创 2021-02-09 00:18:52 · 210 阅读 · 0 评论 -
观光奶牛(01分数规划,判断正环)
思路:碰见这种在图上求2个累加和的问题,就二分他的答案看有没有个一个正环满足条件,有题意可以知道若mid>ans,即存在一个环S使得∑f[i]/∑t[i]>mid时,我们可以继续二分,那么可以变形得到∑(f[i]−mid∗t[i])>0,每次加边的更新条件变为t[j]<f[i]−mid∗t[i]若 mid>ans,即存在一个环S使得\sum f[i]/ \sum t[i]>mid时,我们可以继续二分,那么可以变形得到\sum(f[i]-mid*t[i])>0,每次.原创 2021-02-08 19:03:22 · 125 阅读 · 0 评论 -
通信线路(二分+最短路)
思路:从题意可以看出是求在一个从1——N的路径从第k+1条边的最大值最小,一看这最大值最小想到二分,我们发现答案可能是0(当1-n的路径经过的变数小于等于K时)也可能是没有解-1。所以我们二分时从0——1e6+1起,如果答案是1e6+1说明无解,然后我们不断二分出第K+1条边权x,然后在原图跑最短路,根据题意我们可以吧大于x的边权视为1,其他是0,这样我们就能知道当第k+1条边的权值为x时,有没有大于x的边数小于等于K,如果有说明我们的x还能往小继续二分。知道求出最优解。代码:#pragma GCC .原创 2021-01-18 19:38:36 · 365 阅读 · 1 评论 -
绿色通道(单调队列优化,dp,二分)
思路:找最小值最大首先想到二分,我们发现这个时间t对答案来说满足单调性,所以我们二分答案,check时,我们发现就是判断长度为x的区间最小值是否小于t,dp[i]表示1——i-1位置满足题意且i位置必须写题,那么可以得dp[i]=min(dp[j])+w[i]我们用单调队列维护dp[j]即可#pragma GCC optimize(2)#include <cstdio>#include <cstring>#include <algorithm>#include.原创 2020-10-28 21:35:35 · 303 阅读 · 0 评论 -
使徒来袭(二分)
思路:已知3个数的积,求3个数和的最小值,那么当3个数相等时和是最小的,二分答案即可。#pragma GCC optimize(2)#include <cstdio>#include <cstring>#include <algorithm>#include <set>#include<iostream>#include<vector>#include<queue>#include<map>.原创 2020-08-29 10:08:40 · 395 阅读 · 0 评论 -
Educational Codeforces Round 60 (Rated for Div. 2) C. Magic Ship
题目链接思路:二分检测答案可行性,(x1,y1是起始位置,x2,y2是终点)此时的天数是m 因为风向每n天一轮回,我们算从1-n天每天风向会把船推向的位置,那么m天后x的位置是m/n * ax[n]+ax[m%n]+x1,同理y的位置就是m/n*ay[n]+ay[m%n]+y1,最后我们算从当前x,y到终点x2,y2的曼哈顿距离是否小于等于m ,若小于等于m则可行#include <cstdio>#include <cstring>#include <algorithm原创 2020-07-09 09:58:42 · 138 阅读 · 0 评论 -
【HNOI2006】公路修建(二分+最小生成树)
思路:最大值最小首先想到二分,二分他花费最大公路的路费,这条路必定在一级公路上,然后通过克鲁斯卡尔判断是否能构成最小生成树。#include <cstdio>#include <cstring>#include <algorithm>#include <set>#include<iostream>#include<bits/stdc++.h>using namespace std;typedef long long ..原创 2020-06-23 14:03:38 · 181 阅读 · 0 评论 -
栗酱的不等式(二分)
思路:二分答案n枚举x检测可行性。#include <cstdio>#include <cstring>#include <algorithm>#include <set>#include<iostream>//#include<bits/stdc++.h>using namespace std;typedef long long ll;#define space putchar(' ')#define enter.原创 2020-06-12 17:34:42 · 204 阅读 · 0 评论 -
wyh的物品(01分数规划)
思路:有题可知最后的答案ans满足ans=∑i=1mvi/∑i=1mwians= \sum_{i=1}^mv_i/\sum_{i=1}^mw_ians=i=1∑mvi/i=1∑mwi上面变形为∑i=1mvi−ans∗∑i=1mwi>=0 \sum_{i=1}^mv_i-ans*\sum_{i=1}^mw_i>=0 i=1∑mvi−ans∗i=1∑mwi>=0由上可知我们可以二分答案ans检测其正确性#include <cstdio>#in.原创 2020-05-23 23:11:31 · 227 阅读 · 0 评论 -
Block Towers CodeForces - 626C(二分)
思路:我们可以二分答案,当我们二分的mid/2表示2的倍数的个数,mid/3表示3的倍数的个数,mid/6表示既是2的倍数又是3的倍数的个数。由题可知,若mid/2<n或者mid/3<m或者mid/2+mid/3-mid/6<n+m则不符。#include <cstdio>#include <cstring>#include <algorithm>#include <set>//#include<bits/stdc++.h&.原创 2020-05-19 21:20:18 · 304 阅读 · 0 评论 -
数的三次方根(二分)
思路:典型的实数二分,(快读暴毙警告)#include <cstdio>#include <cstring>#include <algorithm>#include <set>#include<bits/stdc++.h>using namespace std;typedef long long ll;#define s...原创 2020-04-26 17:38:58 · 401 阅读 · 0 评论 -
K-th Number(二分+尺取)
题意:有T组数据。 每组数据给定长度为 N的数组 A,对所有长度大于等于 k 的连续子段,取出其第 k 大放入数组 B 中。求数组 B 的第 M 大。思路:二分答案x检查可行性,x是B数组的第M大所以B数组就有M个大于等于x的数,求有多少个大于X的数就是求有多少个区间的第K大大于X。s[i]表示从1-i大于等于X的数量利用这个求一个区间的第K大是否大于x,再通过尺取长度为K的区间即可。#in...原创 2020-04-29 19:03:39 · 318 阅读 · 0 评论 -
区间和(离散化+前缀和)
思路:区间和问题我们想到前缀和去求但是下标范围很大,但是数量小,所以我们吧每个数的下标和查询的区间进行离散化再前缀和。#include <cstdio>#include <cstring>#include <algorithm>#include <set>#include<bits/stdc++.h>using names...原创 2020-04-27 21:23:37 · 297 阅读 · 0 评论 -
假的数学游戏(斯特林公式求N!长度)
题目链接思路:因为数很大所以我们用斯特林公式求n!的长度最接近x^x的长度就行。二分找最小的n。下面为斯特林公式求N!的长度#include <iostream>#include <algorithm>#include <cmath>#include <ctype.h>#include <cstring>#includ...原创 2020-03-28 17:18:56 · 171 阅读 · 0 评论 -
牛牛战队的比赛第(二分)
思路:因为比赛地都在X轴,所以二分最大距离的最小的值,得出来其在X轴上的范围如果为空集则说明二分的距离过大。#include <iostream>#include <algorithm>#include <cmath>#include <ctype.h>#include <cstring>#include <cstdi...原创 2020-02-14 18:26:37 · 99 阅读 · 0 评论 -
第K小分数
题解: 由于p是质数,所以每个分数都不可约分,由于对于每一个1/P1, 2/P1, 3/P1, …, P1-1/P1序列都是递增,我们可以二分答案,算出小于等于二分答案的数有多少个,当个数等于k时即二分答案接近要求的答案,记录最接近的分子和分母,即为答案#include <iostream>#include <algorithm>#include <cmat...原创 2020-01-31 23:17:58 · 206 阅读 · 0 评论 -
Best Cow Fences
题意:给你n个牛的自身价值,让你找出连续的且数量大于等于F的一段区间,使这段区间内的牛的平均价值最大。分析:1、首先二分区间的平均值为多少,让数组中的所有数都减去平均值。2、再从数组中找出一段长度大于等于F的区间,看区间和是否会大于等于0。3、要找这段区间需要维护左端点最小值,枚举右端点。先把减去平均值的数组求一个前缀和,再设K,对于当前枚举到的 i 位置,我们想让a[i]-a[k],...原创 2020-01-31 16:40:40 · 235 阅读 · 0 评论