随笔分类 - 二分/三分
摘要:D. Guess the Permutation 题意:交互题,一长度为$n$的排列,选择三个整数$i,j,k\ (1\le i<j<k\le n,j-i>1)\(,然后翻转区间\)[i,j-1]\(和\)[j,k]$内的元素。每次可以询问一个区间,告诉你区间逆序对的数量,让你在40次之内得出$i,
阅读全文
摘要:题意:有$n$个待完成的任务,每个任务都有编号,有一队列,如果队列没满,就将任务入队,否则,查询队列中是否有和当前任务编号相同的任务,如果有,将其提到队位,贡献+1,否则,排出队头。现在问你队列的容量最少为多少能满足贡献不小于$k$. 题解:很明显,$k$具有单调性,我们可以二分答案。现在来看che
阅读全文
摘要:题意:两条垂直边之间有$n$个点,问点的半径至少为多少可以将两条边完全封死。 题解:首先对半径进行二分,然后分别统计能到达左边和右边的点,将相交的点用并查集合并起来,然后判断能到达左边的点和右边的点是否在同一个集合即可。 代码: #include <bits/stdc++.h> #define ll
阅读全文
摘要:题意:有$k$个机器,下标$[0,k-1]$,现在有$n$个任务,每次给你起始时刻和持续时间,第$i$个任务从第$i\mod k$个机器开始,如果当前机器没有任务在进行,则执行这个任务,否则去找$(i+1)\mod k$,....,如果所有机器都在执行任务,则忽略这个任务,所有任务询问完后,问你哪些
阅读全文
摘要:题意:给你两个长度分别$n$和$m$的序列$a$和$b$,构造一个$n$x$m$的矩阵,每个单位的权值$w_{i,j}=a_i+b_j$,现在要选一个长宽至少为$x$x$y$的子矩阵,求所选矩阵的最大平均值. 题解:这题不难转化为在$a$中找长度最小为$x$的区间最大平均值和在$b$中找长度最小为$
阅读全文
摘要:题意:有一组序列$a=[a_0,a_1,...,a_]$,每次操作得到一组新序列$b=[b_0,b_1,...,b_]$,\(b[i]=gcd(a_i,a_{(i+1)\mod n})\),问你最少操作几次可以是新序列所有元素相等. 题解:所有元素相等,即最后所有$b_i=gcd({a_0,a_1,
阅读全文
摘要:题意:有$n$x$n$的矩阵,用$k$x$k$的小矩阵去遍历整个矩阵,求所有$k$x$k$矩阵中遍历时的最小中位数. 题解:二分答案.将原矩阵根据二分的值变成01矩阵,如果元素值不小于$x$就变为$1$,否则就是$0$.对于某个$k$x$k$的小矩阵,统计它的元素和,如果它的和$sum<\lfloo
阅读全文
摘要:题意:给你$n$个数,每个数都有$3$~$5$个因数,问你将这$n$个数累乘后的因子数. 题解:对于求约数个数,很容易想到唯一分解定理:\(x=p_1^{a_1}*p_2^{a_2}*...p_k^{a_k}\),然后就能计算出因子数:\((a_1+1)*(a_2+1)*...(a_k+1)\).但
阅读全文
摘要:题意:给你两个字符串$a$和$b$,有$q$个询问,每次给你一个区间$[l,r]\(,问你在\)[a_l,...,a_r]$中,子串$b$出现了多少次. 题解:我们可以先预处理出所有$b$在$a$中的起始和末尾位置,用两个数组分别存他们,其中存末尾位置的时候要取负,方便后面二分查找,然后每次询问的时
阅读全文
摘要:题意:对于一个数$x$,有函数$f(x)$,如果它是偶数,则$x/=2$,否则$x-=1$,不断重复这个过程,直到$x-1$,我们记$x$到$1$的这个过程为$path(x)$,它表示这个过程中所有$x$的值,现在给你一个数$n$和$k$,要你找出最大的数$x$,并且$x$在$path[1,n]$中
阅读全文
摘要:题意:有个长度为$n$的监狱,犯人在位置$a$,cop在位置$b$,你每次可以向左或者向右移动一个单位,或者选择不动并在原地放一个爆竹$i$,爆竹$i$在$s[i]$秒后爆炸,cop每次向你的位置移动一个单位,你最终一定会被抓住(因为监狱是有限的),问你在被抓住前,最多能看到多少爆竹爆炸. 题解:我
阅读全文
摘要:题意:给你一张图,要你去边,使其成为一个边数为$n-1$的树,同时要求树的最小边权最大,如果最小边权最大的情况有多种,那么要求总边权最小.求生成树后的所有简单路径上的最小边权和. 题解:刚开始想写最大生成树的,但是很明显不能满足总边权最小的要求.所以这里我们可以用二分,二分最小边权的值,然后再去跑k
阅读全文
摘要:题意:给你一个字符串,找出一个类似为$aaabbbccc$这样的由连续的$abc$构成的子序列,其中$|a|=|b|=|c|$,问字符串中能构造出的子序列的最大长度. 题解:这题刚开始一直想怎么线性扫过,结果好像没有什么思路(其实是可以预处理$b$的个数然后双指针的),但这题最好写的其实还是二分答案
阅读全文
摘要:题意:给你两个长度为$n$的数组$a$和$b$,元素值在$[0,n-1]$,可以对$b$数组的元素任意排序,求新数组$c$,满足$c_i=(a_i+b_i)\ mod\ n$,并且使得其字典序最小. 题解:这种取模求最小的题,我们一眼就能看出最优情况一定是$b_i=n-a_i$,可以先用set存一下
阅读全文
摘要:题意:有一长度为奇数$n$的数组$a$,和长度为$m$的数组$b$,现要求从$b$中选择一个数放到$a$中,并将$a$分成$(n+1)/2$个数对,求最小的所有数对差的和. 题解:我们从$b$中选一个数出来,只和$a$中的一个元素配对,剩下的依然是$a$中$n-1$个数两两配对,所以我们可以先求个前
阅读全文
摘要:题意:给你四组长度为$n$序列,从每个序列中选一个数出来,使得四个数字之和等于$0$,问由多少种组成情况(仅于元素的所在位置有关). 题解:$n$最大可以取4000,直接暴力肯定是不行的,我们可以先对后两个数组$c$和$d$,枚举他们每个元素的和,用一个新数组$CD$记录,然后再去枚举$a$和$b$
阅读全文
摘要:题意:有长度$n$的序列,让你构造序列,使得二分查找能在$pos$位置找到值$x$.问最多能构造出多少种排列? 题解:题目给出的$pos$是固定的,所以我们可以根据图中所给的代码来进行二分,确定有多少数小于$x$和大于$x$,然后根据排列组合即可算出答案. 代码: int n,x,pos; ll f
阅读全文
摘要:题意:有$n$个数,每次可以选$k(1\le k\le n)$个数,并且得到$a_1+max(0,a_2-1)+max(0,a_3-2)+...+max(0,a_k-k+1)$的贡献,问最少选多少次使得总贡献不小于$m$. 题解:我们从大到小排序,然后二分答案,贪心,如果答案是$k$天,那么对于前$
阅读全文
摘要:题意:有$n$个点,$m$条边,只有当你的智力值大于这条边的$w$才能走,问在花费不超过$k$的情况下,从$1$走到$n$的所需的最小智力值. 题解:这题比赛为什么没想出来呢?赛后看题解发现可以二分答案然后跑最短路来check,网上的题解全都是SPFA啊,我还是喜欢写dijkstra qwq. 代码
阅读全文
摘要:题意:有$n$个话题,每次都必须选取不同的话题,且话题数必须是上次的两倍,第一次的话题数可以任意,问最多能选取多少话题数. 题解:我们首先用桶来记录不同话题的数量,因为只要求话题的数量,与话题是多少无关,所以我们可以开个新数组然后离散化一下,比如$mp[5]=6$可以离散化成$disc[1]=6$,
阅读全文