牛客寒假算法基础集训营
文章平均质量分 60
qq_45778406
这个作者很懒,什么都没留下…
展开
-
组合数问题(复数快速幂, 组合数)
牛客思路参考题解, 众所周知组合数是满足二项式定理的, 这里有:(x+y)n=Cn0x0yn+Cn1xyn−1+...+Cnn−1xn−1y+Cnnxny0( x + y )^n = C _n^0 x_0 y _n + C _n^ 1 x y^ {n − 1} + . . . + C _n ^{n − 1} x_ {n − 1} y + C_ n^ n x _n y _0(x+y)n=Cn0x0yn+Cn1xyn−1+...+Cnn−1xn−1y+Cnnxny0考虑复数有i1=原创 2021-02-27 01:02:34 · 274 阅读 · 0 评论 -
牛客训练赛
题意一个n∗nn*nn∗n 的初始全零的矩阵,按如下方法填数1 2 36 5 37 8 9但是这样子太过简单,所以每一次操作会选择一个子矩阵,请你在其子矩阵上进行填数,并在最后输出整个矩阵思路显然满足和染色一个道理, 我们只需要从后向前染色即可, 总之暴力可过, 不过需要优化, eg如果染色当前(x, y)点, 发现(x, y)点已经被修改了,我们可以通过被修改的数据直接跳到下一个点即可,还有可以通过线段树来解, 建n棵线段树, 每一棵表示一行中的染色情况, 对于如果已经染色的点, 就不再染色原创 2021-02-24 11:42:49 · 120 阅读 · 0 评论 -
石子游戏(差分)
思路参考题解:我们要将所有数字变成一样其实也就是让差分数组中的正负值都变成零, 联想到模拟, 我们肯定要先让a[1] == a[2], 再依次让前1 ~ i的数字一样, 假设我们改变到了x, 如果d[x] = a[x] - a[x - 1] > 0, 说明a[i]这个数偏大, 我们需要将前1 ~ x - 1中的数都变成和a[x]一样大而如果((x - 1) % k != 0)则无法实现,如果d[x] < 0 则需要将x + 1 ~ n的数都减小, (但我们没法减小, 可以先提前让答案减小, 看原创 2021-02-24 01:23:34 · 139 阅读 · 0 评论 -
比武招亲(上)(lucas定理, 逆元, 组合数)
思路其实思路很清晰, 我们要求所有的贡献和,而每一种贡献都在 0到n−10 到 n - 10到n−1中, 假设我们先求贡献为xxx 的数列, 我们只需求出贡献为x的不同的序列的个数即可, 很显然1到x + 1, 和2 到 x + 2中的序列数是一样的,所以我们只要求出1到sx + 1中的种数,再乘以可选的区间数就 == 贡献为x的所有序列数。对于1到x + 1怎样求可选的序列数呢, 因为我们的序列只有m个数, 但由于这个区间中的贡献已经确定好了,所以1, 和x 必选, 即只需在1到x + 1中选m .原创 2021-02-24 00:10:41 · 127 阅读 · 0 评论 -
美丽的路径(dfs,二分)
Link思路首先要考虑能否到达, 可以用dfs或者bfs或者并查集如果能到达就要考虑第最大的美丽值是多少了,看题解才明白二分, 对于二分枚举的每一个美丽值看能否出即可,如何判断呢,通过观察可以知道, 如果在路径上有一条连接的两个点的点权都大于枚举的美丽值, 显然成立, 因为这是无向变,可以来回跑这一条边, 其他的如果要满足的话就必须要满足路径上大于等于美丽值的点 >= 小于路径上小于美丽值的点的个数, 显然只有010101, 或者 101010, 或者, 10101, 1为大于等于美丽值的原创 2021-02-23 22:09:24 · 126 阅读 · 0 评论 -
温澈滢的狗狗(二分)
LINK题目描述众所周知,温澈滢在宿舍养了一排 n 只狗狗,每只狗狗都有一个颜色 cic_ici 。同时,它们只喜欢和不同颜色的狗狗玩,否则它们会觉得很单调无趣。也就是说,如果第 i 只狗狗和第 j 只狗狗颜色不同,那么它们可以拥有亲密关系,它们亲密度可以表示成 ∣i−j∣∣i−j∣∣i−j∣∣i−j∣\mid i-j\mid∣i−j∣∣i−j∣∣i−j∣∣i−j∣,否则它们就不能建立亲密关系。当 n 只狗狗颜色两两不同时,它们有n(n−1)2n(n−1)22n(n−1)n(n−1)2\frac原创 2021-02-21 23:24:17 · 97 阅读 · 0 评论 -
字符串hash双值hash
双值Hash就是用两个不同的mod值来计算Hash,如果两个Hash值都相等才认为是同一个字符串,Hash冲突概率降低了很多,但是常数大,容易被卡。时间上:自然溢出法<单Hash+大质数<双Hash+大质数。Hash的几个常用公式:Hash递推:Hash[0]=0;Hash[i]=(Hash[i-1]*p+s[i]-‘a’+1)%mod;区间Hash值:Hash[L…R]=(Hash[R]-Hash[L]*p^(R-L+1)+mod)%mod;这里减法可能会溢出eg:ha原创 2021-02-21 17:10:55 · 3092 阅读 · 1 评论 -
牛牛与整除分块
题目描述整除分块,又称数论分块。是数论算法中的重要技巧,你可以在各种需要枚举因子的连续求和类问题中见到它的身影。如杜教筛,莫比乌斯反演化简后的整除分段求和等。整除分块基于这样一个数学现象:对于任意正整数N,集合S={x:x=⌊Ni⌋,i∈1,2,3…N}S=\left { x:x=\left \lfloor \frac{N}{i} \right \rfloor ,i\in 1,2,3…N \right }S={x:x=⌊iN⌋,i∈1,2,3…N}的大小总是严格小于2N2 \sqrt N2N。例原创 2021-02-04 23:29:41 · 215 阅读 · 0 评论 -
牛牛的“质因数”(筛法,dfs)
题目描述算数基本定理,又称唯一分解定理,算术基本定理可表述为:任何一个大于1的自然数 N,如果N不为质数,那么N可以唯一分解成有限个质数的乘积。即N=p1e1⋅p2e2…pmem(p1<p2<…pm)N=p_1^{e_1}\cdot p_2{e_2}…p_m{e_m}(p_1 < p_2< … p_m)N=p1e1⋅p2e2…pmem(p1<p2<…pm)朴素的质因子分解算法就是利用了算数基本定理,依次枚举p判断N是否包含素因子p。牛牛最近对于质因原创 2021-02-04 17:39:14 · 277 阅读 · 0 评论 -
点一成零(并查集,逆元)
题目描述牛牛拿到了一个n*n的方阵,每个格子上面有一个数字:0或1行和列的编号都是从0到n-1现在牛牛每次操作可以点击一个写着1的格子,将这个格子所在的1连通块全部变成0。牛牛想知道,自己有多少种不同的方案,可以把全部格子的1都变成0?所谓连通块,是指方阵中的两个正方形共用一条边,即(x,y)和以下4个坐标的数是连通的:(x-1,y)、(x+1,y)、(x,y-1)、(x,y+1)这个问题对于牛牛来说可能太简单了。于是他将这个问题变得更加复杂:他会选择一个格子,将这个格子上的数字修改成1(如果原创 2021-02-02 22:06:18 · 309 阅读 · 1 评论 -
红和蓝(树形dp, dfs)
题目描述你拿到了一棵树,请你给每个顶点染成红色或蓝色。要求:每个红点周围有且仅有一个红点,每个蓝点周围有且仅有一个蓝点。“周围”的定义:某点周围的点指通过邻边直接连接的点。所谓树,即没有自环、重边和回路的无向连通图。输入描述:第一行一个正整数 nnn,代表树的顶点个数.。(1≤n≤100000)(1 \leq n \leq 100000)(1≤n≤100000)接下来的 n−1n-1n−1 行,每行两个正整数 uuu 和 vvv,代表点 uuu 和点 vvv 有一条边连接。 (1≤u,v原创 2021-02-02 18:35:02 · 2640 阅读 · 0 评论 -
串
题目描述长度不超过nnn,且包含子序列“us”的、只由小写字母构成的字符串有多少个? 答案对109+710^9+7109+7取模。所谓子序列,指一个字符串删除部分字符(也可以不删)得到的字符串。例如,“unoacscc"包含子序列"us”,但"scscucu"则不包含子序列"us"输入描述:一个正整数nnn(2≤n≤1062 \leq n \leq 10^62≤n≤106)输出描述:一个正整数,为满足条件的字符串数量对109+710^9+7109+7取模的值示例1输入2输出1原创 2021-02-02 12:34:43 · 262 阅读 · 0 评论