牛客
文章平均质量分 57
alpc_qleonardo
这个作者很懒,什么都没留下…
展开
-
牛客国庆集训派对Day2 E 数据排序(状态压缩dp)
虽然说得分可以一样,但是我们还是可以仅仅只用两个状态0和1来表示这一题。某一个位置为0表示当前这个数字还没有被标号,也即当前数字比所有的已经标号的数字都要小。如果为1,那么说明这个已经标号,并且这个数字与比它先标号的数字和与其相等的数字的冲突值已经计算过了。于是一个状态,我们可以用一个15为的二进制数字来表示。令dp[i]表示当前的状态,那么当前状态就可以转移到后面的状...原创 2018-10-02 21:16:58 · 306 阅读 · 0 评论 -
牛客练习赛34 F little w and Discretization(可持久化线段树)
猛然发现,过这道题竟然已经是10天前的事情了……题意大概就是说给你一个序列,每次询问把一个区间的数字离散化,问离散化之后与原本数字不相同的数字个数有多少个。这里有很多个询问,每个询问之间相互独立。既然是要离散化,我们肯定不能到询问的时候再离散化,肯定是在做所有询问之前,先自己离散化一下。我们考虑一个数字离散化之后与它本身的区别,由于这里说了数列里面的数字都是1~1e...原创 2018-12-25 09:43:05 · 538 阅读 · 0 评论 -
牛客练习赛32 F Friendly Polynomial(NTT + 多项式逆元 + 组合计数)
大致题意:一个数列,如果存在一个i∈[1,n-1],使得前i个数字是1-i的一个排列,那么这个数列和不合法的。现在问1-n的排列中,有多少个不合法的数列。首先,我们定义一个不合法的序列,它仅被最大的一个i给计算,也即前i个数字是排列,后i+1~n个数字不是排列的情况。这个时候,我们令fn表示长度为n的不合法数列个数,那么显然有: ...原创 2018-12-25 21:38:03 · 265 阅读 · 0 评论 -
牛客练习赛40 D 小A与最大子段和(斜率优化dp + 二分)
中文题。原本的最大连续子串和就是一个dp的问题,所以这里也很容易往dp方向去想。与经典问题类似,我们同样令dp[i]表示以i为结尾的连续子串的最大和。由于这里的和的定义有不同,所以我们这里只用一维去表示貌似不是很够,因为如果从前面继承过来,至少需要知道起点是多少,这样才能把当前这个数字加到和里面。但是实际上,我们可以换一种思考方式。我们把每一个dp的数值单独来求,我们发现对...原创 2019-02-17 22:18:16 · 435 阅读 · 2 评论 -
牛客练习赛 41 简单数学题(数论 + 状态压缩 + FWT)
非常有意思的题,我解题的过程也是非常的精彩。纪念一下人生第一道FWT。首先是第一个f(t)函数,根据它的定义,首先是x必须是t的因子,然后要求莫比乌斯函数不为0,而且要满足这个条件的最大值。根据这几个条件,显然x就是t分解质因子后,所有质因子的乘积。然后g(x)函数,就是看每个因子的指数,如果是奇数那么这个质因子还在,否则相当于没有这个质因子。最后就是F(a,b,c),...原创 2019-03-04 19:29:09 · 344 阅读 · 0 评论 -
国防科技大学第二十二届“银河之光”计算机文化节ACM程序设计大赛 简要题解
补题地址:https://ac.nowcoder.com/acm/contest/878#questionA首先暴力搜索找到距离每个人最近的出口是哪个。然后,对每个出口建立优先队列,把每个人放到他应该走的出口的队列即可。B显然人的强壮程度没有意义。考虑最小费用流。每个出口按照时刻拆成多个点,表示哪个时刻出来。同一个出口第i时刻向i+1时刻连边,流量无穷费用1。每个人向每个出口...原创 2019-05-04 16:59:40 · 932 阅读 · 3 评论 -
2019牛客多校赛 第一场 I题 Points Division (DP + 线段树)
大致题意:给你n个点,第i个点在的位置为(xi,yi),有两个属性值(ai,bi)。现在让你把这n个点划分为A和B两个部分,使得最后不存在i∈A和j∈B,使得xi>=xj且yi<=yj。然后对于所有的划分方法,找到并输出 首先那个划...原创 2019-07-19 12:59:40 · 943 阅读 · 26 评论 -
2019牛客多校赛 第一场 H题 XOR (线性基 + 组合计数)
大致题意:给你n个数字,然后让你求所有满足异或和为0的子集的大小之和。首先这个子集大小之和,显然可以转换为计算每个数字的出现次数之和。考虑到异或和为0的子集,相当于可以用集合中的一部分数字去表示另外一部分数字,所以很容易想到用线性基解决这个问题。对于这n个数字求线性基,假设线性基的个数为r(r<n),那么对于线性基外的n-r个数字,他们的任意组合都可以在线性基内的...原创 2019-07-19 16:14:53 · 883 阅读 · 2 评论 -
2019牛客多校赛 第六场 C Palindrome Mouse (回文树/回文自动机)
大致题意:给你一个字符串,问这个字符串的子串中,有多少个本质不同的回文串恰好是另外一个回文串的子串,求这样的回文串的对数。可以说,这是一个回文树/回文自动机的裸题吧。显然,在回文树里面,一个节点的所有后代都是回文串而且包含当前回文串,所以可以直接统计所有节点的size。然后,当前节点的所有后代也包含当前节点的fail回文串,所以后代的贡献也要算到fail上。那么,一个很显然的问题...原创 2019-08-04 18:26:51 · 461 阅读 · 2 评论 -
2019牛客多校赛 第三场 D Big Interger(数论 + 组合计数)
大致题意:一个数列为1,11,111,1111,......令A(n)表示这个序列的第n小的数字。告诉你p,n和m,让你求有多少对(i,j)可以使得,其中1<=i<=n,1<=j<=m,p为质数。根据这个数列的形式,数列的第n项等于。那么我们相当于找到所有的,使得。我们整理一下这个式子,可以得到:。当时,,根据欧拉定理有。但是这里不一定是...原创 2019-07-26 21:59:40 · 434 阅读 · 3 评论 -
2019牛客多校赛 第五场 C generator 2(矩阵乘法 + 分块 + bsgs)
大致题意:给你一个很长的数列,然后这个数列递推公式是Xn = a * Xn-1 + b。问你在模p下,这个数列中,第一次出现v的位置是多少,如果不出现那么输出-1。这个东西,你先尝试着用矩阵快速幂去做,然后你构造出矩阵,假设答案为x。之后你会发现,答案可以化简成一个通项公式。具体来说,我们设转移矩阵为A,那么A=[[a,b],[0,1]],然后A^x=[[a^x,b*(...原创 2019-08-01 22:29:12 · 314 阅读 · 0 评论 -
2019牛客多校赛 第七场 H Pair(数位dp)
大致题意:告诉你范围A和B,让你求在两个范围内,有多少对数字可以使得二者按位与大于C或者异或小于C。一个比较常规的数位dp,然而比赛的时候由于自己复杂度计算错误,还写了好久的优化,最后发现不优化也能过。我们令dp[len][x][y][lim1][lim2]表示在二进制下,当前长度为len的时候,第一个条件的状态为x,第二个条件状态为j,第一个数字的限制情况为lim1,...原创 2019-08-08 17:20:41 · 762 阅读 · 8 评论 -
2019牛客多校赛 第九场 I KM and M(贡献 + 组合计数)
大致题意:告诉你一个n和m,让你求。涉及到位运算的东西,很容易想到计算贡献,这里也是一样。因为最后按位与的是一个常数,所以只需要看这个常数对应为1的位置,在M、2M、3M...NM这N个数字中,有多少个仍然是1。用个数乘以对应位的2的幂次即可。那么现在问题变成了如何求这个个数。我们考虑对于一个数字iM,如果求它二进制下第j位是否是0。显然,我们可以先把iM右移j位得到x...原创 2019-08-19 08:39:44 · 395 阅读 · 0 评论 -
牛客练习赛31 F 瑟班守护者莎利雅与护教军(推导 + 线段树)
一道算是挺难想的线段树。需要维护两个数组,一个d和一个f。f的定义参见体题面,前后最大值中最小的,再与自己的d取一个大的。然后有三种操作,1是求f的和;2是求区间[l,r]中,有多少个f的数值大于给定的数字v;3是修改某一个位置的d的值,使其增加v。在这里,f随着d的数值而变化,但是这个变化的关系没有什么直观的联系。下面我们仔细考虑一下,这两个到底有什么关系。 ...原创 2018-11-17 16:52:35 · 306 阅读 · 0 评论 -
牛客练习赛31 C 无畏死灵术士莉莲娜与锁链面纱(dfs + 期望dp)
太久没有做期望/概率dp,已锈。。。大概就是说给你一个1到n的全排列,然后每次随机选择一个数字在不改变其他数字相对位置的前提下,把比他小的数字放在他前面,大的在后面。问期望几次能够使得这个序列有序。由于是求期望,所以显然是要倒着求。令dp[x]表示状态x下变得有序的期望步数。那么显然有转移方程: ...原创 2018-11-17 00:25:13 · 327 阅读 · 0 评论 -
牛客国庆集训派对Day1 I Steins;Gate(原根 + FFT)
上一次用到原根这个东西,应该是一年之前了吧……所谓原根,就是指对于某个数字P,满足它的原根g,g的0~P-2次幂在模P的意义下互不相同,或者说g的1~P-1次幂在模P的意义下无不相同。一般来说,原根只能够进行枚举求解,但是由于原根一般较小(2或者3),所以可以接受。对于本题,要求对于每一个数字ak计算在模P意义下,有多少个ai*aj等于ak。直接做显然是O(N^2)的,不能...原创 2018-10-02 00:27:05 · 594 阅读 · 0 评论 -
牛客练习赛27 F 计数(状态压缩dp + 矩阵快速幂优化)
中文题。由于m最大范围只有5,而且每一个位置只能够填写3和7,所以我们不妨考虑状压,用0和1分别表示3和7,这样就是一个5位的二进制数字。那么我们的限制条件也可以很好的通过位运算来判断。接着我们考虑这么多个位置如何计算方案数。首先,我们简化问题,把问题变成一条链而不是一个圈,这样一个位置可以放什么数字就只是与前面四个位置有关系。如果之前的7的个数已经大于3的个数,那么当前位置放...原创 2018-09-24 10:47:42 · 343 阅读 · 0 评论 -
2018牛客多校赛第一场 A Monotonic Matrix(组合计数)
大致题意:给你一个n*m的矩阵,每一个位置可以填0、1和2三个数字,但是要求每个数字下面和右边的数字要大于等于他自己。现在问满足条件的填数字方法有多少种。看完这道题,很明显的一个dp题。转移方程也很容易想出来,但是这样写出来你会发现样例也过不了-_-。其实问题也很明显,这个问题不满足后效性,计算出来的方案数会比实际的方案数要多。那么我们就得换一个思路去思考这个问题。注...原创 2018-09-20 19:54:14 · 257 阅读 · 0 评论 -
牛客国庆集训派对Day2 A 矩阵乘法
就是让你做一个矩阵乘法,但是可能暴力做复杂度比较高(不会告诉你暴力也能过)。题目已经大致告诉你优化的方法了。如果两个二进制向量点乘,那么可以用与运算代替乘法运算,最后统计结果中1的个数。而本题就是让你实现这个过程。可以看到,第二个矩阵是一个01矩阵,所以说可以用类似的方法。第一个矩阵是一个16进制的矩阵,但是我们可以把这个16进制的2^16级别的数字拆成16个矩阵。而第...原创 2018-10-02 21:30:43 · 262 阅读 · 0 评论 -
2018牛客多校赛第二场 H Travel(树形dp)
大致题意:给你一棵树,每个点上有一个点权,让你找三条不相交的链,使得这三条链的权值和最大。典型的树形dp,但是状态不太好表示。很容易想到,令dp[i][j]表示在点i以及对应子树里面取了j条链的最大权值和。但是在转移的时候,有可能出现一个点的不同儿子中的链合并的情况,仅仅这样表示状态并不能很好的表示转移。所以我增加一维,令dp[i][j][0]表示在点i取了j条链的最大权值...原创 2018-10-03 10:58:34 · 322 阅读 · 0 评论 -
牛客国庆集训派对Day3 B Tree(树形dp + 组合计数)
题意有点绕,其实就是让你求一个点能被多少个点集包含,同时这些点集内的点要相互连通。首先,简单来说,如果只是计算一个有根树中任意一个点被多少个只包含它以及它的子树的点的点集包含,那么直接普通的树上统计的trick就可以搞定。但是现在问题是,点集的点可以是其子树之外的点。我们注意到,对于根来说,它的答案都满足点集里面的点都在它的子树里面,所以说如果能够把每一个点都当作根来计算...原创 2018-10-03 23:54:57 · 565 阅读 · 1 评论 -
牛客国庆集训派对Day4 E 乒乓球(组合计数 + NTT)
求这个期望,无非就是要求一个贡献。而这个贡献就是任意间隔大于二的两个数字的乘积,然后统计它们的出现次数。对于两个位置i和j,满足j>i+1,现在考虑如何计算这个会出现的次数。我们令j-i-1=k,要做到会有wi*wj这个贡献,意味着从i和j中间k个乒乓球必须比第i和j个乒乓球先拿走。这个方案数我们这么考虑,首先着k个乒乓球可以任意排列,然后i和j两个放在它们后面,之...原创 2018-10-04 23:45:51 · 309 阅读 · 0 评论 -
牛客国庆集训派对Day4 F 导数卷积(NTT)
要求计算两个多项式求导的卷积。我们首先把单个多项式求i阶导的式子写出来: 那么总的式子就是: 虽然说这个式子如果可以交换求和次序,把i放到内层,然后j和k放到外层循环,这样可以很...原创 2018-10-05 11:05:08 · 398 阅读 · 1 评论 -
牛客练习赛28 D 随风飘(dp + 字符串哈希)
能用字符串哈希解决的问题,千万别用后缀数组、字典树什么的了……这题有很多个询问,每次询问是从n个中拿走k个字符串,问拿走之后的答案。我们显然不能把所有拿走的方案枚举一遍,所以考虑计算每一个字符串的贡献。这里我的贡献指第i个字符串与它前面的字符串的贡献。而这个贡献就是计算当前串与前面所有串的lcp。这里千万不要看到lcp就去想后缀数组,这里是多个串的lcp,而不是一个串的l...原创 2018-10-07 10:39:22 · 302 阅读 · 0 评论 -
牛客练习赛 29 E 位运算?位运算!(线段树)
要求让你实现支持以上要求的数据结构。本题的特点主要是这些操作都是区间的位运算。由于这里最多只有20位,而且每一次的左移和右移都是强制补齐到20位的左移和右移,所以我们可以考虑线段树维护每一位的情况。考虑线段树的每一个节点i,它对应的sum[j]表示对应区间中有多少个数字的第j位是1。当遇到区间的 或 或者 与 操作的时候,就可以按照位去操作。对于或操作,如果对应的位是1...原创 2018-10-21 14:39:23 · 230 阅读 · 0 评论 -
WannaFly挑战赛 28 C msc的宠物(二分答案 + 树形dp)
题意相当于是把一棵树分为k+1个部分,然后使得这么多个部分的极差最大值最小。首先考虑直接树形dp,由于是在讨论极差,所以我们要想办法表示极差的状态,但是我们发现仅仅用状态表示极差,并不能够很好的转移,而且极差本身也不好表示。在转移的时候,满足一个子树的极差最小值,在考虑别的节点的时候可能并不是最小值,也就是说子问题是有后效性的,这也就意味这直接用dp是做不了的。所以...原创 2018-11-10 13:03:24 · 660 阅读 · 2 评论 -
牛客练习赛30 F 小K种妹妹(树上分块)
大致题意,实现一种树状数据结构,包含修改权值,添加节点,删除边和查询子树内特定权值范围节点个数的操作。虽然说是数据结构,而且有LCT这个东西可以考虑使用,但是分块作为一种非常快速的方法着实是赛场上的首选。树上的分块相对比较少见,本题可以作为树上分块的模板题。树上分块与普通分块类似,只不过是要按照dfs序去分块。每次顺序dfs,把节点加入块中,当块的节点个数大于阈值,那么...原创 2018-11-09 00:01:46 · 205 阅读 · 0 评论 -
2019牛客多校赛 第八场 H How Many Schemes(AC自动机 + 矩阵 + 向量 + 树链剖分 + 线段树)
大致题意:给你一棵树,每条边上有一个字符串,然后有一些模式串。现在给你一个询问<u,v>,问你u到v的路径上,每个条边任意选择一个字符,最后按照顺序组成一个字符串,最后的字符串包括至少一个模式串的方案有多少种。看起来很难的样子,写起来其实很复杂,但是理解清楚了其实思路也不太难。首先,既然涉及到匹配问题,而且是多个模式串,很容易想到对模式串建立AC自动机。...原创 2019-08-15 20:57:54 · 338 阅读 · 0 评论