返回顶部

随笔分类 -  牛客

摘要:牛客练习赛91 D.监狱逃亡 因为总共就$3$行,先计算三行的前缀和,我们假设第一行在$i$处下来,第二行在$j$处下来,那么就有$sum[1][i]+sum[2][j]-sum[2][i-1]+sum[3][n]-sum[3][j-1]\ge 0$ 移项得到$sum[2][j]-sum[3][j- 阅读全文
posted @ 2021-11-18 15:39 _Kolibri 阅读(83) 评论(0) 推荐(0)
摘要:题意:将$n$划分成小于$k$的正整数之和的方案数. 题解:设$dp[i]$为$i$的方案数,因为最小的能取的数是$k$,所以$dp[i]=dp[i-k]+dp[i-k-1]+...dp[0]$,这样转移过来,而$dp[i-1]=dp[i-k-1]+dp[i-k-2]+...+dp[0]$,所以可以 阅读全文
posted @ 2021-05-22 23:08 _Kolibri 阅读(117) 评论(0) 推荐(0)
摘要:题意:你有$H$点体力和$S$点耐力,击杀一个怪物$i$需要消耗$h_i$点体力和$s_i$点耐力,当体力为$0$时你就gg了,但是如果你当前的耐力不够击杀怪物所需要的耐力时,你可以用你的体力来透支你不够的耐力,之后你的耐力变为$0$.问你最多能得到多少金币. 题解:假如耐力不能透支的话,那么就是二 阅读全文
posted @ 2021-05-13 19:59 _Kolibri 阅读(162) 评论(0) 推荐(0)
摘要:题意:你要连续$T$天去景点游玩(上午或者下午),有$n$个室内景点和$m$个室外景点,每个景点都有自己的值,对于同一个景点,每次重复参观,权值都要*\(0.6\).如果在下午参观室外景点那么景点的权值*\(0.8\).你至少有$k$天在下午游玩,问你能得到的最大权值是多少. 题解:对于*$0.6$ 阅读全文
posted @ 2021-05-07 11:52 _Kolibri 阅读(70) 评论(0) 推荐(0)
摘要:题意:RT,给你一个字符串,问你最少分割多少子串,满足这些子串均为D型回文串. 题解:首先,判断回文我们可以用字符串hash来处理,这里不再赘述. 我们设$dp_i$,表示遍历到$i$位置时我们最少要分割多少子串来满足条件,我们看D型回文串的第一个条件,那么有:\(dp[i]=min(dp[i],m 阅读全文
posted @ 2021-03-29 10:34 _Kolibri 阅读(64) 评论(0) 推荐(0)
摘要:题意:给你节点数为$n$的树,每个节点都有自己的权值,求所有路径的上的点的权值按位与的和. 题解:题目给的数据很大,我们不能直接去找.因此我们可以枚举二进制$[1,20]$的每一位,然后再枚举所有点,看它二进制对应位置是否满足条件,之后再去dfs找$1$的连通块即可. 代码: const int N 阅读全文
posted @ 2020-12-19 13:53 _Kolibri 阅读(92) 评论(0) 推荐(0)
摘要:题意:给你一个字符串,找出一个类似为$aaabbbccc$这样的由连续的$abc$构成的子序列,其中$|a|=|b|=|c|$,问字符串中能构造出的子序列的最大长度. 题解:这题刚开始一直想怎么线性扫过,结果好像没有什么思路(其实是可以预处理$b$的个数然后双指针的),但这题最好写的其实还是二分答案 阅读全文
posted @ 2020-12-09 17:18 _Kolibri 阅读(110) 评论(0) 推荐(0)
摘要:题意:给你一组数,每次可以选择拿走第$i$个数,得到$a[i]$的分数,然后对于分数值为$a[i]-1$和$a[i]+1$的值就会变得不可取,问能得到的最大分数是多少. 题解:$a[i]$最大取$2e5$,那我们可以枚举$[1,2e5]$的所有数字,用桶记录每个数出现的次数$cnt$,对于当前所枚举 阅读全文
posted @ 2020-12-07 16:24 _Kolibri 阅读(81) 评论(0) 推荐(0)
摘要:题意:RT. 题解:很明显的线段树维护区间最大值操作,但是我们同时还要维护最大值的个数,我们在build或者modify操作完子树然后push_up的时候,我们先从两个儿子取max更新父节点的最大值,然后再判断父节点的最大值是否和两个儿子相等,这样我们就成功的维护了区间最大值的个数.剩下的就是线段树 阅读全文
posted @ 2020-12-07 16:11 _Kolibri 阅读(151) 评论(0) 推荐(0)
摘要:题意:给你一个$n$个点的完全$k$叉树的先序遍历序列$a$,还原这颗树并且求所有两个端点的异或和. 题解:用dfs在还原树的时候,把子节点和父亲节点的异或贡献给答案,对于每个节点,我们找它所有的子节点(从左到右),如果子节点合法就不断递归求贡献即可. 代码: class Solution { pu 阅读全文
posted @ 2020-11-25 15:30 _Kolibri 阅读(93) 评论(0) 推荐(0)
摘要:题意:给你一组数,选一些数出来组成一个排列,使得每个数都能被前一个数整除,求排列的最大元素. 题解:我们先用欧拉筛筛出$1e7$的质数,设$dp[i]$表示当前选的数都是$i$的约数且合法的最大元素值.所以我们可以用$dp[i]$去更新$i$的倍数的$dp$值,我们可以靠枚举$i$的素数倍来降低复杂 阅读全文
posted @ 2020-10-26 20:56 _Kolibri 阅读(217) 评论(0) 推荐(1)
摘要:题意:给一个$nXm$的矩阵,可以选取$aXb$的子矩阵,使子矩阵中的所有元素减一,问最后是否能使矩阵中所有元素变为$0$. 题解:首先贪心,我们看最左上角的元素,如果$g[1][1]\ge0$,那么我们就要对其子矩阵的所有元素减去$g[1][1]$,然后因为$g[1][1]$已经是$0$了,假如$ 阅读全文
posted @ 2020-10-26 19:33 _Kolibri 阅读(137) 评论(0) 推荐(0)
摘要:题意:RT 题解: \(i\ mod \ k=0\),即所有事$k$的倍数的位置都要进行异或,根据异或的性质,我们知道如果相同的异或的数个数是偶数的话,得出的结果是$0$,所以每次询问,我们判断需要进行异或的个数,如果不是奇数的话就不用求贡献,这儿还有个结论,如果我们原来有偶数的个数,然后进行一次异 阅读全文
posted @ 2020-10-12 20:48 _Kolibri 阅读(179) 评论(0) 推荐(0)
摘要:题意:RT 题解:先对$p$排个序,然后设$dp[i]$表示前$i-1$个$p[i]$满足条件但是$p[i]\(不满足,即在\)[1,p[i]]$中不存在从$p[1]$到$p[i-1]$[的排列,比如说$p[1]=1$,\(p[2]=2\),\(p[3]=3\),则$dp[4]\(中一定不能存在\) 阅读全文
posted @ 2020-10-12 10:49 _Kolibri 阅读(98) 评论(0) 推荐(0)
摘要:题意:每次有$3$中操作,对两个点连条边,删去某条边,或者问当前大小不为$1$的树的数量.连重边或者删去一条不存在的边,这样的白痴操作可以无视qwq. 题解:水题,用map存一下pair然后分论讨论即可. 代码: int n; ll u,v; map<PLL,bool> mp; map<ll,ll> 阅读全文
posted @ 2020-10-02 21:32 _Kolibri 阅读(144) 评论(0) 推荐(0)
摘要:题意:有一个模板串,有$T$个字符串,从字符串中找到某个子串,使得这个子串中的子序列包含模板串,求最短的子串的长度. 题解:找子序列,很容易想到序列自动机,根据序列自动机的原理,我们一定可以确保除了第一个字符,其他的字符的位置都是最优的,所以我们先对模板串的第一个字符$p$记录它的所有位置,然后再遍 阅读全文
posted @ 2020-10-02 21:26 _Kolibri 阅读(125) 评论(0) 推荐(0)
摘要:题意:有一个模板串,给你$T$个字符串,选取最短的子串,使其重新排列后包含模板串,求最短的子串的长度 题解:遍历字符串,记录每个字符出现的最后位置,每记录一个后再遍历子串,找到子串需要的所有的字符的最后出现的最小位置,如果合法,更新答案即可. 代码: const string tp="puleyak 阅读全文
posted @ 2020-10-02 21:21 _Kolibri 阅读(173) 评论(0) 推荐(0)
摘要:题意:有$n$个点,$n-1$条边,每个点的类型是$0$或$1$,现在让你选一个点,然后所有与该点类型不同的点直接消失,问选哪些点之后,该点所在的联通块最大. 题解: 因为选完之后两个类型不同的点之间的边会消失,所以我们可以直接维护一个并查集,每个集合中存的是相同类型的点的连通数量,维护最大值即可. 阅读全文
posted @ 2020-09-24 20:41 _Kolibri 阅读(79) 评论(0) 推荐(0)
摘要:题意:给你两个正整数$x$和$y$,求两个正整数$a$,\(b\),使得$a+b=x$,$a$&$b$=\(y\),如果$a$,\(b\),输出$a\ xor \ b$,否则输出$-1$. 题解:根据位运算的基本性质,我们知道$a\ xor \ b$可以表示不进位的加法,而($a$&$b$)<<1可 阅读全文
posted @ 2020-09-24 20:26 _Kolibri 阅读(131) 评论(0) 推荐(0)
摘要:题意:给你一张图,对其染色,使得相连的点的颜色两两不同求,最少使用多少种颜色. 题解:首先,若$n=1$,只需要一种.然后我们再去判断是否是二分图,对于二分图,两种颜色就够了,若不是二分图,也就是可能存在奇环的情况,那么三种颜色铁够了.所以题目就转化成了判断是否是二分图. 代码: int n,m; 阅读全文
posted @ 2020-08-18 20:20 _Kolibri 阅读(157) 评论(0) 推荐(0)