基础算法
hide_on-BUSh
这个作者很懒,什么都没留下…
展开
-
【牛客】21303 删括号
dp[i][j][k]表示考虑s前i个匹配了t前j个s被删除部分左括号数-右括号数=k是否可行,dp[len][len1][0]即为最终答案。原创 2023-04-17 11:21:28 · 62 阅读 · 0 评论 -
P3368 【模板】树状数组 2
也就是说b[i]=a[i]-a[i-1];),那么a[i]=b[1]+....+b[i];发现了没有,b数组只有b[2]和b[5]变了,因为区间[2,4]是同时加上2的,所以在区间内b[i]-b[i-1]是不变的.区间修改+,-的时候我们可以通过维护差分数组,维护我们区间于区间之间的差值关系然后query求和就可。a数组变为a[]={1,8,10,7,10},b数组变为b={1,7,2,-3,3};设数组a[]={1,6,8,5,10},那么差分数组b[]={1,5,2,-3,5}原创 2023-03-19 11:59:48 · 82 阅读 · 0 评论 -
B - Flipping Game
那么可以发现,假设这次有j个位置是奇数次,这次有k个位置从奇数次变成了偶数次,那么很明显,剩下m-k个位置就是从偶数次变成了奇数次。那么dp[i+1][j-k+m-k]+=dp[i][j]*c[j][k]*c[n-j][m-k]这个式子就出来了,c表示的是组合数,也就是下一轮的j-k+m-k(之前有j个奇数次位,减去了这次变成偶数位的个数k,再加上这次由偶数位变成奇数位的个数m-k),这也就是dp[i][j]中的j个奇数位中选择k个,从剩下的n-j个偶数位中选出m-k个,得到的就是如上的式子。原创 2023-03-08 21:51:35 · 107 阅读 · 0 评论 -
c++priority_queue的默认排序规则及自定义排序详解
也可以定义为小根堆 即priority_queue默认先按q.top().first从大到小,相同的时候按q.top().second从大到小进行排序。priority_queue中如果储存pair类型的话。默认的优先队列中是按照从大到小的方式排序就是大根堆。重载之后他的排序方式就跟咱们定义结构体排序的相反。对于优先队列中开了结构体自定义排序规则的时候。我们重载运算符后的排序。原创 2023-03-08 20:08:29 · 2929 阅读 · 0 评论 -
CCPC 2020 广告投放
这是能够取到最大的收益和的一个方案。原创 2023-03-02 09:20:16 · 73 阅读 · 0 评论 -
E. Advertising Agency(费马小定理求组和数)
【代码】E. Advertising Agency(费马小定理求组和数)原创 2023-02-28 17:31:28 · 51 阅读 · 0 评论 -
C. Hamiltonian Wall(dp)
{int n;cin >> n;j < n;j++){i < 2;i++){}{}{}}}int main(){int t;cin>>t;{}}原创 2022-12-19 20:38:33 · 360 阅读 · 0 评论 -
kmp模板
【代码】kmp模板。原创 2022-12-01 21:45:20 · 44 阅读 · 0 评论 -
D. Nezzar and Board
原文链接:https://blog.csdn.net/weixin_45750972/article/details/113389644。转载 2022-12-01 16:15:36 · 48 阅读 · 0 评论 -
P - Balanced Stone Heaps
当我们从后边转移过来的b[i]>=mid的时候我们可以将a[i]的全部转移到前面,注意题目是从前往后所以我们向前转移的时候是不会超过a[i]本身的。你可以选择一个数字d(0≤3⋅d≤hi),从第i堆移出d个石头到第(i-1)堆,再从第i堆移出2⋅d个石头到第(i-2)堆。那么当b[i]原创 2022-11-29 10:35:47 · 415 阅读 · 0 评论 -
gcd的性质
根据辗转相减法可得到。原创 2022-11-23 09:59:21 · 68 阅读 · 0 评论 -
D. Vertical Paths
然后相当与一个发散的过程我认为你可以认为成开花的过程,把这个点连接到的点都标上第一个子节点是当前这条路,这个点多连的点就是多的路,你可以对发散出去的点在进行dfs,相当于对每一个点都进行了dfs。然后dfs,dfs中有三个自变量,第一个是由哪个节点来的,第二个是现在的状态即这个是第几条路径,第三个是这个节点的父亲节点;题意:就是给你一个排列然后每个下标对应的元素是其下标的父节点,然后让你求出有几个不同的路径。这题先不管父子节点的类型先用vector存下每个节点能连接的数字。原创 2022-11-16 22:48:28 · 146 阅读 · 0 评论 -
reverse函数反转字符数组getline
reverse函数反转字符数组。原创 2022-11-04 16:18:55 · 57 阅读 · 0 评论 -
sort(a+1,a+1+n,greater<int>())
【代码】 sort(a+1,a+1+n,greater())原创 2022-11-04 16:09:52 · 310 阅读 · 0 评论 -
归并排序(详解)
归并排序归并排序可求逆序对。转载 2022-10-31 20:52:22 · 52 阅读 · 0 评论 -
Palindromic Numbers
【代码】Palindromic Numbers。原创 2022-10-27 21:48:34 · 60 阅读 · 0 评论 -
C2. Make Nonzero Sum (hard version)
题意:给定一个只包含 1 0 -1的数组,请你把这个数组划分为若干的连续区间(l,r)。有一个函数sum(l,r)=a[l]-a[l+1]+a[l+2]-a[l+3]…a[r]这样,要求你划分的若干个区间的sum函数之和为0。3.当一个数前面有其他数的时候,可以扭转这个数的正负号,但是之后这两个数都不能再被选中。2.有贡献的数前面的符号分为正负两种。1.绝对值为1的数有贡献。原创 2022-10-26 11:56:01 · 113 阅读 · 0 评论 -
D1. Balance (Easy version)SET加MAP
用map相当于离散化不用开呢莫大数组 map记录呢个数组出现的最后一次的位置。用set判断是否出现过这个数字。大规模降低时间复杂度。原创 2022-10-25 16:58:34 · 106 阅读 · 0 评论 -
STL set
返回一对定位器,分别表示第一个大于或等于给定关键值的元素和 第一个大于给定关键值的元素,这个返回值是一个pair类型,如果这一对定位器中哪个返回失败,就会等于end()的值。这个函数在set并不是很实用,因为一个键值在set只可能出现0或1次,这样就变成了判断某一键值是否在set出现过了。在set中每个元素的值都唯一,而且系统能根据元素的值自动进行排序。应该注意的是set中数元素的值不能直接被改变。set中的删除操作是不进行任何的错误检查的,比如定位器的是否合法等等,所以用的时候自己一定要注意。原创 2022-10-25 16:27:41 · 43 阅读 · 0 评论 -
C. Unusual Competitions变量维护先后顺序
【代码】C. Unusual Competitions变量维护先后顺序。原创 2022-10-19 16:37:28 · 44 阅读 · 0 评论 -
C. K-Complete Word
由题意构造一个k个相同的回文串需要的最小操作数。原创 2022-10-19 11:38:35 · 87 阅读 · 0 评论 -
VECTOR COUNT COUNT_IF
/注意不是vector的类函数哟!二.count_if函数:返回符合一定条件的元素个数。compare()函数是自定义的,返回值是true就是表示符合要求。对于vector,我们可以很方便地寻找其中符合条件的元素的个数。要注意它们不是vector的类函数,不要用vector.去调用。一.count函数: 返回元素值为target的元素个数。原创 2022-10-19 10:08:09 · 117 阅读 · 0 评论 -
D. Problem with Random Tests
不用考虑第二段第三段连续的1因为其前面有0我们不能靠第二段1引领的后缀消灭这段0。s1必定是整个串,s2的选择应该是第一段连续的1。禁止hack说明暴力可以过。原创 2022-10-18 16:08:28 · 90 阅读 · 0 评论 -
L - Obtain The String CodeForces - 1295C (二分思维)
话说可以用序列自动机写闲了补代码。原创 2022-10-18 00:03:11 · 53 阅读 · 0 评论 -
序列自动机
序列自动机是一个可以快速判断t是否是字符串s的子串的一个算法。使用空间复杂度来换取时间复杂度。原创 2022-10-17 23:40:19 · 35 阅读 · 0 评论 -
D. MEX maximizing(巧用同余数)
【代码】D. MEX maximizing(巧用同余数)原创 2022-10-17 21:05:29 · 83 阅读 · 0 评论 -
E1. Divisible Numbers (easy version)
【代码】E1. Divisible Numbers (easy version)原创 2022-10-17 17:45:52 · 261 阅读 · 0 评论 -
CodeForces - 1295D
题目分析:因为辗转相除法的定义:gcd(a,b) = gcd(b,a mod b)可知,当 i ∈ [ a , m ] 和 i ∈ [ m , 2 * m ] 时,gcd( i ,m ) 相等的 i 的个数相同,因为每次都是对第二个数取模,所以具有周期性,而题目要求我们求得是 i ∈ [ a , m + a -1 ] 时的个数,因为长度为一个完整的周期,所以我们不妨将其问题转换为 i ∈ [ 0 , m ] 时,满足gcd( i , m ) = = gcd ( a , m ) 的个数。其中p1, p2……转载 2022-10-15 14:47:24 · 63 阅读 · 0 评论 -
D. Masha and a Beautiful Tree
每相邻两个点的编号的大小比较来确定是否要进行移动。先确定局部的先后顺序,维护树内的先后顺序。通过缩小树的范围确定每次是否要移动。一个从局部到整体的思想。原创 2022-10-12 17:32:10 · 238 阅读 · 0 评论 -
Remove One Element
【代码】Remove One Element。原创 2022-10-10 20:46:10 · 36 阅读 · 0 评论 -
01bfs
每逢佳节胖三斤,牛牛在过去的节日里长胖了,连拐弯都困难,甚至会卡在门上,所以他很讨厌拐弯。给你一个N*N(2≤N≤100)的方格中,‘x’表示障碍,‘.’表示没有障碍(可以走),牛牛可以从一个格子走到他相邻的四个格子,但是不能走出这些格子。问牛牛从A点到B点最少需要转90度的弯几次。第一行一个整数:N,下面N 行,每行N 个字符,只出现字符:‘.’,‘x’,‘A’,‘B’;表示上面所说的矩阵格子,每个字符后有一个空格。一个整数:最少转弯次数。如果不能到达,输出-1。原创 2022-10-06 11:15:31 · 64 阅读 · 0 评论 -
dijkstra朴素版堆优化
dijstra原创 2022-09-20 22:38:40 · 186 阅读 · 0 评论 -
链式前向星,拓扑排序
拓扑排序判有向图环,求关键路径,链式前向星的使用原创 2022-09-20 16:32:57 · 229 阅读 · 0 评论 -
邻接矩阵,邻接表
存图方式原创 2022-09-19 20:49:51 · 221 阅读 · 0 评论 -
动态规划基础(详细)
动态规划基础轻松了解原创 2022-08-03 17:47:35 · 169 阅读 · 0 评论 -
并查集算法
并查集算法应该是我在寒假集训中接触到的较为简单的一种算法这个东西可以对以后的图论用处感觉还蛮大的(蒟蒻理解)第一步(初始化)在主函数中对数组进行初始化,让数组的值等于它本身for(int i=1;i<=n;i++) fa[i]=i;第二步(找爹)寻找父亲节点int find(int x){ if(fa[x]==x) return x; else return find(fa[x]);}第三步连接不同的父亲结点原创 2022-02-11 22:37:16 · 167 阅读 · 0 评论 -
动态规划,背包
01背包问题描述有n个物品,它们有各自的体积和价值,现有给定容量的背包,如何让背包里装入的物品具有最大的价值总和?对于每一个物品,只有两种可能,选或者不选,用f[i] [j]来表示从前i个物品中选出总体积不超过j的物品的所有可能的最大值由此可以发现对于第i个物品来说f[i][j]两种可能(1)f[i][j]=f[i-1][j] 不选第i个物品(从i-1个中选取体积为j的物品)(2) f[i][j]=f[i-1][j-v[i]]+w[i] 选择第i个物品所以可以得出转移方程f[i][j原创 2022-02-11 22:06:20 · 48 阅读 · 0 评论 -
差分的应用
差分的结果反映了离散量之间的一种变化对于一个数组每次给你一对L和R让你依次对L到R之间的数进行加上k的操作求最后的数组;这时候我们只要用一个等大的数组a[i]来记录数组见两个元素的差值维护这个区间的左端点(L)和右端点的下一个位置(R)就可以维护这个要操作的区间,使要操作的区间加k(具体见下).这个操作并不是广义上的每个数进行,而是通过这区间的两个位置的变化加上前缀和操作完成。********************************************************原创 2022-02-10 22:47:41 · 500 阅读 · 0 评论