二分
文章平均质量分 58
__Rain
这个作者很懒,什么都没留下…
展开
-
BZOJ [WF2013] Low Power(二分
#3969. [WF2013]Low Power思路:code:#include<bits/stdc++.h>#define endl '\n'#define ll long long#define ull unsigned long long#define ld long double#define all(x) x.begin(), x.end()#define mem(x, d) memset(x, d, sizeof(x))#define eps 1e-6using原创 2022-03-14 21:03:31 · 532 阅读 · 0 评论 -
B. Range and Partitio (划分子段、二分+前缀和
B. Range and Partition题意:给定一个长度为 nnn 的数组 aaa。你需要确定一个范围 [x,y][x,y][x,y],并将 aaa 数组分成 kkk 段,使得对于每一段,在范围 [x,y][x,y][x,y] 以内的元素个数大于在范围 [x,y][x,y][x,y] 以外的元素个数。请求出任意一组使得 y−xy-xy−x 最小的 x,yx,yx,y 和划分的方案。思路:题目所述的这类问题可以通过正负性解决记区间内的为 +1+1+1,区间外的为 −1-1−1如果一段区间 [原创 2022-03-12 17:43:42 · 1188 阅读 · 0 评论 -
ACwing 周赛 36 二分+前缀和
4217. 机器人移动思路:比较细节的是判定 −1-1−1,步数不够很好想,但是还要满足步数奇偶性的判定 (abs(a)+abs(b)) % 2 !=n % 2(abs(a) + abs(b)) \ \% \ 2 \ != n\ \% \ 2(abs(a)+abs(b)) % 2 !=n % 2checkcheckcheck 函数,如果修改这一段,只要删除这一段后位置与终点位置二维曼哈顿距离小于等于原创 2022-02-22 16:08:32 · 199 阅读 · 0 评论 -
二分+差分维护
金牌厨师题意:给定 mmm 个区间,每个区间在 [1,n][1,n][1,n] 之间,选出 kkk 个区间,这 kkk 个区间的交集长度为 mmm,定义满意度为 min(k,m)min(k,m)min(k,m)求最大满意度思路:显然二分最大化具体 checkcheckcheck 看代码好理解code:#include<bits/stdc++.h>#define endl '\n'#define ll long long#define ull unsigned long lo原创 2022-01-17 16:14:22 · 371 阅读 · 0 评论 -
ABC 227 D(二分
D - Project Planning题意:给定 nnn 种小球,每种小球 AiA_iAi 个。要求每 mmm 个互不相同的小球可以在一起放到一个盒子里,求最多可以放多少个盒子。思路:先说说二分的正确性二分答案每次 checkcheckcheck 的肯定是盒子数量 midmidmid,因为每个盒子不能出现重复的小球,因此每种小球至多取 min(mid,Ai)min(mid,A_i)min(mid,Ai) 个,取完 nnn 种小球的总数量为 sumsumsum,而装成 midmidmid 个原创 2021-11-15 21:22:26 · 545 阅读 · 3 评论 -
二分+三分练习
传送门B题完全平方数题意:查询 [l,r][l,r][l,r] 范围内的完全平方数个数思路:这个题需要的思路就比较巧,考虑 1000000000=31622\sqrt{1000000000}=316221000000000=31622,总范围内至多这些完全平方数对查询区间 l,rl,rl,r 也开方,然后二分出来左边界和右边界即可code:#include<bits/stdc++.h>#define endl '\n'#define ll long longusing n原创 2021-10-27 09:24:42 · 154 阅读 · 0 评论 -
SWERC 2020 C. Safe Distance(并查集+二分+思维
C. Safe Distance题意:给出一个 X * Y 大小的矩形有 nnn 个人,每个人都在矩阵某个位置求从左下角 0,00,00,0 走到 X,YX,YX,Y 这个过程中,与人的距离的最大值思路:读题我们可以,我们需要使得最小距离最大化,可以想到二分答案难点在于我们该如何 checkcheckcheck如果能想到这种处理方式,题目就迎刃而解了(感觉很难想用并查集维护连通性,检查边界是否有通过人连接起来的,如果有就说明当前的midmidmid 太大,不符合因为是从左下走到右上所原创 2021-10-07 21:03:07 · 329 阅读 · 0 评论 -
[NOIP2012]借教室(二分答案+差分前缀和
[NOIP2012]借教室二分答案,用差分+差分前缀和code:#include<bits/stdc++.h>using namespace std;const int N = 1100000;int n,m;int r[N],d[N],s[N],t[N],b[N];//检查函数 bool check(int k){ //复制数组(r为前缀和形式) for (int i = 1;i<= n; i++) b[i] = r[i]; //处理(两点原创 2021-09-28 20:28:17 · 161 阅读 · 0 评论 -
2021ccpc 网络赛 补题 Time-division Multiplexing(二分) && Power Sum && Function
Power Sum-hdu-7105这个题要知道一个性质:(x+1)2(x+1)^2(x+1)2−-−(x+2)2(x+2)^2(x+2)2−-−(x+3)2(x+3)^2(x+3)2+++(x+4)2(x+4)^2(x+4)2===444用四个数为构造 nnn 贡献 444 的大小,然后 nnn modmodmod 444 =0,1,2,3=0,1,2,3=0,1,2,3,我们还可以发现 1=11=11=1,4−1=34-1=34−1=3,−1−4−9+16=2-1-4-9+16=2−1−4−9+1原创 2021-08-29 10:46:16 · 619 阅读 · 2 评论 -
ABC 216 补题 E(二分+大根堆模拟
D - Pair of Balls模拟#include<bits/stdc++.h>#define ll long long#define _ 0using namespace std;const int maxn = 2e5 + 9;ll n, m, x, y;struct node{ vector <int> v; int pos;}a[maxn];vector <int> id[maxn];queue <int> q;int原创 2021-08-31 19:43:40 · 221 阅读 · 0 评论 -
牛客月赛37 E ( 构造 I (二分 G ( 模拟
加减虽然想到二分了但是不会写check#include<bits/stdc++.h>#define ll long longusing namespace std;const int maxn = 1e5 + 9;ll a[maxn], sum[maxn];ll n, k, ans;inline ll check(int l, int r){ int mid = (l + r) / 2; ll x = a[mid] * (mid - l + 1) - a[mid] * (r原创 2021-08-28 00:05:22 · 334 阅读 · 2 评论 -
#725 (Div. 3) D(线性筛+思维 F 思维 G (思维+二分
D. Another Problem About Dividing Numbers线性筛+思维他让我们恰好通过 k 次操作来让两个数相等,我们可以取极限次数,就是除一遍这个数所有的质因子,直至为1。也就是统计两个数,所有质因子的个数的加和,这是我们能操作的最多次数。如果 k 超过这个数目,那么一定不行,否则我们可以通过组合质因子,来构造出恰好 k 次操作来让两个数相等#include<bits/stdc++.h>using namespace std;typedef long long原创 2021-07-11 19:01:05 · 151 阅读 · 0 评论 -
二 分 专 题 (0/1数分
//模板一 找满足某个条件的第一个数 即右半段int binary1(int l, int r){ while(l<r) { int mid=(r+l)>>1; if(check(mid) r=mid; else l=mid+1; } return l;}//模板二 找满足某个条件的最后一个数 即左半段int binary1(int l, int r){ while(l<r) { int mid=(r+l+1)>>1; i原创 2021-07-04 15:21:19 · 147 阅读 · 0 评论 -
acwing 周赛6
求和#include<bits/stdc++.h>#define endl '\n'using namespace std;typedef long long ll;ll l, r;ll ans = 0;ll nums[10000], cnt;void dfs(ll x){ if(x > (ll)5e9) return; if(x >= l) nums[cnt++] = x; dfs(x * 10 + 4); dfs(x * 10 + 7); }int原创 2021-07-04 10:37:44 · 67 阅读 · 0 评论 -
hdu-1496 解方程
hdu 1496哈希解法:二分解方程#include<bits/stdc++.h>using namespace std;const int N = 1e5 + 9;int x[N], y[N];int a, b, c, d;int main(){ while(~scanf("%d %d %d %d", &a, &b, &c, &d)) { if(a>0&&b>0&&c>0&&am原创 2021-04-22 18:15:57 · 220 阅读 · 0 评论