返回顶部

05 2020 档案

摘要:题意:给你一个数组,求有多少子数组的中位数等于$m$.(若元素个数为偶数,取中间靠左的为中位数). 题解:由中位数的定义我们知道:若数组中$<m$的数有$x$个,$>m$的数有$y$个,只有$x=y$或$y-x$=1时,中位数才能取到$m$,记$m$在原数组的位置为$pos$. ​ 于是,我们先遍历 阅读全文
posted @ 2020-05-29 00:25 _Kolibri 阅读(106) 评论(0) 推荐(0)
摘要:题意:给你一个巨长无比的数,你可以将这个数划成任意多个部分,求这些部分中最多有多少个能被$3$整除. 题解:首先我们遍历累加每个位置的数字,如果某一位数或者累加和能被$3$整除(基础知识,不会就去百度),那这就是一部分,再来,我们可以发现一个部分最长只有$3$个数字. 证:当我这个部分有$3$个数字 阅读全文
posted @ 2020-05-29 00:02 _Kolibri 阅读(138) 评论(0) 推荐(0)
摘要:题意:有$n$个点,连$m$条边,求最多有多少条食物链(从头走到为有多少条路径). 题解:之前抽了点时间把拓扑排序补完了,这题其实就是一道拓扑排序的裸题.关于拓扑排序: ​ 1.首先,我们用$in$记录某个点的入度,$out$表示这个点向外所连的点. ​ 2.遍历所有点,找到入度为$0$的点,将其入 阅读全文
posted @ 2020-05-28 23:46 _Kolibri 阅读(180) 评论(0) 推荐(0)
摘要:题意:给你$n$组数,每组4个正整数$a,b,c,d$,每组数有两个选择: ​ 1.增加$a$个财富,消耗$b$点魔法. ​ 2.回复$c$点魔法,减少$a$个财富. 求最后财富*魔法的最大值. 题解:我们从第$1$组数开始dfs,我们先考虑选择第一种情况,然后不断搜索,之后在搜索第二种情况,维护一 阅读全文
posted @ 2020-05-27 15:46 _Kolibri 阅读(273) 评论(0) 推荐(0)
摘要:题意:给你一组全是$2^d\ (d\ge0)\(的数,询问q次,每次询问一个数,问这个数是否能够由原数组中的数相加得到,如果能,输出最少用多少个数,否则输出\)-1$. 题解:首先贪心得出结论:如果情况成立,那么最少的情况一定是优先用数组中大的数,然后我们用桶记录数组数的个数,从$inf$开始枚举, 阅读全文
posted @ 2020-05-27 14:40 _Kolibri 阅读(151) 评论(0) 推荐(0)
摘要:题意:一年有$n$个月,每月有$d_$天,找出连续的$x$天,使得这$x$天的日期总和最大,任意一年都能选. 题解:首先要先贪心,得到:连续的$x$天的最后一天一定是某个月的最后一天,我们先预处理两个前缀和,分别记录连续的天数和总日期数,然后枚举,二分找出一个区间,得出这个区间的总日期数再加上区间最 阅读全文
posted @ 2020-05-27 14:23 _Kolibri 阅读(212) 评论(0) 推荐(0)
摘要:题意:商店里有$k$个包裹,第$i$个包裹中含有$i$个物品,现在想要买$n$物品,你可以选择某一个包裹购买任意次,使得物品数刚好等于$n$,求最少的购买次数. 题解:首先,假如$k\ge n$,那么只用买一次.否则,我们枚举$1$~\(\sqrt n\),若$n\ mod\ i=0$: ​ 1.\ 阅读全文
posted @ 2020-05-26 18:26 _Kolibri 阅读(199) 评论(0) 推荐(0)
摘要:题意:你有$n$天的时间,这段时间中你有$m$长考试,$s$表示宣布考试的日期,$d$表示考试的时间,$c$表示需要准备时间,如果你不能准备好所有考试,输出$-1$,否则输出你每天都在干什么,如果这一天你有考试,输出$m+1$,如果你要准备第$i$场考试,输出$i$,否则休息,输出$0$. 题解:数 阅读全文
posted @ 2020-05-22 02:07 _Kolibri 阅读(83) 评论(0) 推荐(0)
摘要:题意:有一个长度为$n$的序列$a$,求这个序列中有多少比$a_$小的数,如果某两个位置上的数有矛盾,则不能算小. 题解:用$pair$来记录序列中元素的位置和大小,将他们升序排序,对于每对矛盾的位置,只记录$a[u]>a[v]$的情况,小于等于的情况没必要考虑,然后我们遍历排序后的序列,二分查找第 阅读全文
posted @ 2020-05-22 01:58 _Kolibri 阅读(129) 评论(0) 推荐(0)
摘要:题意 :有一个长度为$n$的序列,可以对所有元素++或 ,求最少的操作次数,如果无论如何都不能构成,则输出$ 1$. 题解 :一个等差数列一定由首项$a_{1}$和公差$d$来决定,而这两项可以有$a_{1}$和$a_{2}$来决定,所以我们可以直接暴力枚举$a[1]$和$a[2]$,一共$9$种情 阅读全文
posted @ 2020-05-22 01:44 _Kolibri 阅读(78) 评论(0) 推荐(0)
摘要:题意:有个$n$个公寓,每个公寓$a_$代表着编号为$1-a_$个房间,给你房间号,问它在第几栋公寓的第几个房间. 题解:对每个公寓的房间号记一个前缀和,二分查找属于第几个公寓,然后求个差即可. 代码: #include <iostream> #include <cstdio> #include < 阅读全文
posted @ 2020-05-22 01:36 _Kolibri 阅读(141) 评论(0) 推荐(0)
摘要:题意:给你一个长度为$n$的序列,求一个最长的${x,x+1,x+2,.....,x+k-1}$的序列,输出它的长度以及每个数在原序列的位置. 题解:因为这题有个限定条件,最长序列是公差为$1$的单增序列,所以其实非常简单. ​ 我们用$map$来记录每个元素最后出现的位置,$dp$表示当前位置的最 阅读全文
posted @ 2020-05-21 01:01 _Kolibri 阅读(142) 评论(0) 推荐(0)
摘要:题意:给你$n$个顶点和$m$条边,问它们有多少个单环(无杂环),例如图中第二个就是一个杂环. 题解:不难发现,如果某几个点能够构成单环,那么每个点一定只能连两条边.所以我们先构建邻接表,然后从某个数开始跑dfs,如果这一边所有点的度数都为$2$,那么就能构成一个单环. 代码: #include < 阅读全文
posted @ 2020-05-20 17:59 _Kolibri 阅读(161) 评论(0) 推荐(0)
摘要:题意:给你一个长度为$n$的序列$a$.对它重新排列,使得$a_{i+1}=a_/3$或$a_{i+1}=2*a_$.输出重新排列后的序列. 题解:经典DFS,遍历这个序列,对每个数dfs,每次dfs使$len+1$,当$len=n$时,说明这个序列已经满足条件了,输出并且标记一下,防止还有另外的情 阅读全文
posted @ 2020-05-20 17:37 _Kolibri 阅读(126) 评论(0) 推荐(0)
摘要:题意:有一个长度为$n$的序列,要求在$[1,10^9]$中找一个$x$,使得序列中恰好$k$个数满足$\le x$.如果找不到$x$,输出$-1$. 题解:先对这个序列排个序,然后首先要注意$k=0$的情况 如果$k=0$并且序列中含有$1$,那么我们无论如何都找不到比$1$小的数,输出$-1$, 阅读全文
posted @ 2020-05-20 17:19 _Kolibri 阅读(134) 评论(0) 推荐(0)
摘要:题意:给你$n$个数,每次可以使某个数++,--,或使某个数--另一个++,分别消耗$a,r,m$.求使所有数相同最少的消耗. 题解:因为答案不是单调的,所以不能二分,但不难发现,答案只有一个峰,所以我们可以三分高度,然后写个check函数贪心一下即可. 代码: #include <iostream 阅读全文
posted @ 2020-05-20 12:29 _Kolibri 阅读(153) 评论(0) 推荐(0)
摘要:题意 :有一个长度为$n$的数组,问能否通过多次使某个区间的所有元素变成这个区间的中位数,来使整个数组变成题目所给定的$k$. 题解 :首先这个$k$一定要在数组中存在,然后我们对中位数进行考虑,对于一个长度$ 1$的数组来说,起码要有$2$个$\ge k$的数,才能使得$k$是某个区间的中位数,然 阅读全文
posted @ 2020-05-19 21:49 _Kolibri 阅读(158) 评论(0) 推荐(0)
摘要:题意:有$n$个房间,在这些房间中两两连$m$次条边,问除了第一个房间,其他房间走到第一个房间的最短路径,输出这个房间所连的上一个房间,如果走不到,输出$no$. 题解:刚开始我写了一个dfs,结果竟然编译不了~~(段错误)~~,稍加分析了一下,发现样例1中成环了,然后又在纸上画了画,发现可以用bf 阅读全文
posted @ 2020-05-19 21:28 _Kolibri 阅读(254) 评论(0) 推荐(0)
摘要:题意:给你四个正整数$A,B,C,D$,且$A\le B\le C \le D$,有$A\le x\le B\le y\le C \le z\le D$,求最多有多少组$(x,y,z)$能构成三角形. 题解:这题数据范围最大是$5*10^5$,所以我们肯定不能枚举$x,y$,但是由于题目限定我们知道 阅读全文
posted @ 2020-05-17 16:41 _Kolibri 阅读(192) 评论(0) 推荐(0)
摘要:题意:给你两个正整数$N$和$S$,构造一个长度为$N$并且所有元素和为$S$的正整数数组,问是否能找到一个$K (0\le K \le S)$使得这个数组的任意_子数组_的和都不等于$K$或$S-K$,如果存在则输出YES,并且输出这个数组和$K$,不存在则输出$NO$. 题解:这类题写多了其实就 阅读全文
posted @ 2020-05-17 13:58 _Kolibri 阅读(180) 评论(0) 推荐(0)
摘要:题意:给你一组人$a$,现在要将这些人进行分组,对于$i$,只有某一组的人数$\ge a_$时,$i$才可以加入这个组,问最多能够有多少组,(不必将所有人都选用). 题解:我们将所有$a_\(相同的用一个桶存一下,然后升序遍历这个桶,假如桶里面的人数\)\ge a_\(,那么它们就能够组成一组,之后 阅读全文
posted @ 2020-05-17 13:32 _Kolibri 阅读(197) 评论(0) 推荐(0)
摘要:题意:给你一个体积为$T$的背包,有$n$个物品,每个物品的价值和体积都是是$a_$,求放哪几个物品使得总价值最大,输出它们,并且输出价值的最大值. 题解:其实就是一个01背包输出路径的裸题,直接上板子就行了.(一维的背包写法其实还是不太怎么怎么理解,具体的以后再补). 代码: #include < 阅读全文
posted @ 2020-05-17 13:03 _Kolibri 阅读(189) 评论(0) 推荐(0)
摘要:题意:给你5个$A,B,C,D,E$大小关系式,升序输出它们,如果所给的大小矛盾,输出$impossible$. 题意:当时第一眼想到的就是连边然后排序,很明显是拓扑排序(然而我不会qwq,之后再补),但貌似可以直接暴力来写,用二维数组来记录两个数之间的大小关系,如果一维$>$二维就记录true,然 阅读全文
posted @ 2020-05-17 12:54 _Kolibri 阅读(226) 评论(0) 推荐(0)
摘要:题意:给你一组数,求数组中唯一的出现次数为奇数的那个数. 题解:这题其实直接桶排一下就行了,但是最后一个点会TLE. ​ 后来了解到这题可以用位运算来解决: ​ ^(异或)运算符:用于比较两个二进制数的相应位。在执行按位异或运算时,如果两个二进制数的相应位都位1或两个二进制数的相应位都位0,则返回 阅读全文
posted @ 2020-05-17 12:35 _Kolibri 阅读(244) 评论(0) 推荐(0)
摘要:题意:有一个长度为$n$元素均为$0$的序列,进行$n$次操作构造出一个新序列$a$:每次选择最长的连续为$0$的区间$[l,r]$,使得第$i$次操作时,\(a[\frac{l+r}{2}]=i\)(下取整),求$a$. 题解:刚开始我打算用归并分治的思想来写,但是发现左区间递归不到,然后就gg了 阅读全文
posted @ 2020-05-15 18:48 _Kolibri 阅读(126) 评论(0) 推荐(0)
摘要:题意:有一个$R*C$的矩阵,可以从矩阵中的任意一个数开始,每次都可以向上下左右选一个比当前位置小的数走,求走到$1$的最长路径长度. 题解:这题很明显看到就知道是dfs,但是直接爆搜会TLE,这里我们采用记忆化搜索,什么意思呢? ​ 我们在dfs的时候,每次都记录一下每个点到1的路径长度,然后,之 阅读全文
posted @ 2020-05-14 20:33 _Kolibri 阅读(172) 评论(0) 推荐(0)
摘要:题意:给两个长度为$n$的全排列,求他们的LCS 题解:这题给的数据范围到$105$,用$O(n2)\(的LCS模板过不了,但由于给的是两个全排列,他们所含的元素都是一样的,所以,我们以第一个串为模板,第二个串的每一个元素都能对应到第一个串的元素的位置,第二串对映后的最长上升子序列,就是他们的LCS 阅读全文
posted @ 2020-05-14 19:49 _Kolibri 阅读(186) 评论(0) 推荐(0)
摘要:题意:给你一个数列,求所有子序列对的$lcm$,然后求这些所有$lcm$的$gcd$. 题解:我们对所有数分解质因数,这里我们首先要知道一个定理: ​ 对于$n$个数,假如某个质数$p$,这$n$个数中有$\le n-1$个数的质因数包含$p$,那么他们的$lcm$中一定不含$p$这个因数,随意我们 阅读全文
posted @ 2020-05-14 19:13 _Kolibri 阅读(140) 评论(0) 推荐(0)
摘要:题意:有一个长度为$n$的序列$a$,求一个最长上升子序列,且这个子序列的元素在$a$中的位置满足$i_{j+1}modi_=0$,求这个子序列的最大长度. 题意:这题假如我们用$O(n^2)$的朴素DP来求肯定是会TLE的,我们在原有的方法上做一些优化. ​ 我们首先遍历$a$,确定子序列的首位置 阅读全文
posted @ 2020-05-14 17:16 _Kolibri 阅读(111) 评论(0) 推荐(0)
摘要:题意:求一个只由$01$组成的字符串,使得它所有长度为$2$的子串满足:每对子串的数字和为$0,1,2$的个数为$a,b,c$. 题解:我们先考虑子串数字和为$1$的情况,构造出一个$10$的循环串,然后在它的头部尾部适当添加$1$和$0$,使得a和c也满足即可.需要特判$b=0$的情况,并且$b$ 阅读全文
posted @ 2020-05-10 18:45 _Kolibri 阅读(184) 评论(0) 推荐(0)
摘要:题意:给你一个无限长且元素均为$0$的排列,每次给你一对$(x,y)$,表示在所有$x$的后面插入一个元素$y$,最后给你一个区间$(l,r)\(,输出\)[l,r-1]$中的所有元素. 题解:我们用一个vector和pair来存储每次输入的$(x,y)$,显然,在$x$后插入的最后一个数一定是$x 阅读全文
posted @ 2020-05-10 17:21 _Kolibri 阅读(138) 评论(0) 推荐(0)
摘要:题意:有一个长度为$n$的数组,从第一天开始,第$i$天可以使$i$位置上的数$+1$,当$i=n$时,下次从$i=1$再开始,另外,在每天结束时,你可以使任意一个位置上的数$+1;or;-1$,或者不变,求最少经过多少天可以使得每个位置上的数都相等. 题解:我们对天数进行二分,由中位数定理:数列中 阅读全文
posted @ 2020-05-09 12:20 _Kolibri 阅读(140) 评论(0) 推荐(1)
摘要:问题 :对于一个字符串$s$,询问$q$次:字符串$t$是否为$s$的子序列. 题解 :我们记录一个位置$pos$,遍历$t$,在$s$中二分查找第一个下标大于$pos$并且等于$t[i]$的位置,更新$pos$. ​ 如果找不到直接标记一下即可. 代码 : 阅读全文
posted @ 2020-05-08 15:15 _Kolibri 阅读(133) 评论(0) 推荐(0)
摘要:题意 :RT 题解 :这题比较坑,我用了扩欧和快速幂都T了,后来学习了一种线性算法,用来求一连串数的逆元. ​ 首先我们知道 $p\equiv0 \;(mod\,p)$ . ​ 设: $p=k i +r$,$k$是$p/i$的商,$r$是余数. ​ 于是我们得到$k i+r\equiv 0\;(mo 阅读全文
posted @ 2020-05-08 15:02 _Kolibri 阅读(157) 评论(0) 推荐(0)
摘要:题意: 一个人在雪地上滑雪,每次可以向上下左右四个方向移动一个单位,如果这条路径没有被访问过,则需要5秒的时间,如果被访问过,则需要1秒(注意:判断的是两点之间的距离,不是单纯的点).给你他的行动轨迹,求消耗的时间. 题解:我们用两个pair来维护边,用map来对边进行标记,每次更新map记得双向更 阅读全文
posted @ 2020-05-08 12:43 _Kolibri 阅读(163) 评论(0) 推荐(0)
摘要:题意 :给你两个指数类型的数$Am$和$Bn$,比较他们的大小.保证底数和指数中最多只有一个为0. 题解 :题目数据非常大,肯定不能直接比较.由换底公式和$Log$函数的性质我们知道:\(LogA^m=mLogA\),又因为$Log$函数是单增的,我们便可以用它来进行大小的比较.这里要注意当底数为0 阅读全文
posted @ 2020-05-05 14:02 _Kolibri 阅读(234) 评论(0) 推荐(0)
摘要:题意:给你一组数,求最长的严格上升子序列及个数(mod 1e9+7) 题解:用动态规划来求LIS,记$dp[i]$是数组中第i个位置上的数的LIS最优解,我们遍历一遍原数组,然后找i位置前的LIS,如果$a[j]<a[i]$并且$dp[j]+1>dp[i]$那么当前i位置的最优解就应该更新成$dp[ 阅读全文
posted @ 2020-05-05 13:45 _Kolibri 阅读(194) 评论(0) 推荐(0)
摘要:题意:给你n个数,有m次操作,每次使得两个数相连接,询问q次,问某两个数是否连接在一起. 题解:这其实是一道并查集的裸题,这里就不再多说了,写个路径压缩的find函数即可. 代码: #include <iostream> #include <cstdio> #include <cstring> #i 阅读全文
posted @ 2020-05-05 13:22 _Kolibri 阅读(310) 评论(0) 推荐(0)