- 博客(75)
- 收藏
- 关注
原创 Remove Exactly Two
枚举第一个节点,将与之相邻的节点的度数进行-1处理,然后从剩下的节点中选出度数最大节点。取计算结果的最大值。找剩下节点中度数最大值可以用multiset实现与维护。可见,节点i的选取,对d[j]的贡献产生了影响,可见,直接的贪心做法可能不大好写。设d[i]为节点i的度数,记删除的两个节点为i,j,则图的连通分量为。·.d[i]+d[j]-1,如果i,j不相邻。·d[i]+d[j]-2,如果i,j相邻。注意到被删除的节点就2个,考虑暴力。
2025-03-17 17:04:34
161
原创 直线(蓝桥21省B)
直接计算b=y1-kx1,b的误差会稍大,因为k本就是带有误差的值,再直接用y1-k*x1误差会更大。技巧性处理:k用deltay/deltax表示,代入上式子,通分一下,使得误差降低在最后的除法计算上。
2025-03-04 11:13:43
301
原创 日期统计
想了半天,发现在数组中先匹配出2023实际上到数组5、60多位去了,2023的在原数组中的个数非常有限,即前面好多数据无用,仅需要再后40多位去找月和日,可以优化到O(2^30~2^40)。但这么做还是太费时费力了。看了别人的代码后,大彻大悟,终于找到了正解:枚举 2023中的日期,判断数组中是否存在该子序列。暴力枚举数组中长度为8的子序列,然后去判断是否为2023年的某一天。一看复杂度O(2^100),用自己的电脑算估计得算5202年去了。
2025-02-25 11:32:11
369
原创 Hidden Weights
每个联通块下,当任意固定其中一个顶点的值时,其他的顶点的值都可以推算出来。跑dfs,bfs都行。对于u->v,w,可以再生成边v->u,-w,整个问题就很好解决了。
2025-02-23 15:21:40
195
原创 Repeated Sequence
该序列以a[1],a[2],a[3]....a[n]为循环节,明显的,问题可转化为:s%sum是否为该序列的某个连续子序列和。枚举a[i]为左端点的所有区间的和。unordered_map,优点:增、删、改、查O(1);在处理a[i]时,每个区间减去a[i]即是a[i+1]的情况。map,优点:有序;缺点:增、删、改、查时间O(logn)。记sum=a[1]+a[2]+a[3]+...+a[n]。这里,在查找s的时候加上要减去的值就可以巧妙地实现了。以a[i+1]为左端点的所有区间再从头求一遍?
2025-02-21 23:27:00
151
原创 GCD of Subset
二者都去统计了数组a中,含因子x的数的个数。对于数量大于等于k的因子x,更新a中所有以x为因子的数的答案。1+1/2+1/3+...+1/n约1e8 (n取1e6)数据大时,桶最好手写(直接写数组),map耗时间。预处理每个数的因子1000ms多了。
2025-02-16 20:30:36
152
原创 火烧赤壁(离散化+差分)
由于原始数据很大,即有些区间可能很长,使得要开的数组空间太大,或者统计时间太长。故离散化是一种压缩处理。下标: -2 -1 0 1 2 3 4 5 6 7 8 9 10 11 12。值: 0 1 1 0 1 1 1 2 2 2 2 1 1 0 0。//原始数据(l、r)//离散化:排序+去重。
2025-02-12 16:08:20
143
原创 异或 xor
区间[i,n]某位的1或0的个数可以用前缀和预处理,这样该部分的复杂度就为O(1)了,总复杂度也降为了O(n)。同样的处理方式,代码也基本一样。注意一下标的区别就行了。,在知道[i,n]某位的1、0的个数后,即可算出。1.异或和之和(14届蓝桥省A)3.牛客寒假营4-L。
2025-02-07 21:47:06
214
原创 最长回文子串问题(暴力、中心扩展、dp、二分+字符串hash、manacher)
在中心扩展法中,进行左右扩展的时间复杂度为O(n),而我们如果使用字符串hash+二分判断相等,就可以将扩展的时间复杂度优化到O(logn),从而总体复杂度降低到O(nlog(n))。枚举对称中心的所有位置i,分别讨论以第i个字符为回文串正中心、回文串右半边的第一个字符O(n),向左右进行扩展O(n),取最大值。设f[i][j]表示,字符串s的第i个字符到第j个字符回文状态,值为1则该子串回文,否则不满足回文。枚举所有子串O(n^2),判断是否回文O(n),总体O(n^3)。,j从1往n枚举O(n)。
2025-01-17 16:31:21
422
原创 幂次进近
据题意要求,m只能取到正整数,那么,n^(1/k)结果恰为整时,其值即为答案,否则,答案为该值临近的两个整数中的一个,且需要通过计算选出最佳答案(注意题目“最小的正整数m”)。ans^k可以写快速幂,也可以直接用pow( )来算,因为实际上k的取值不可能太大,最多100+。令n-m^k的绝对值最小,即n-m^k=0,此时m=n^(1/k)。__int128(此类型不能cin、cout),此时用快速幂则运算数类型应使用。参数调成long double。,用函数pow()应将。爆long long。
2025-01-14 23:47:34
246
原创 Three Strings(codeforces div3-991-E)
f[i][j]可以由任意(x+y=i+j-1)的f[x][y](0<=x<i+j-1,0<=y<i+j-1)转移而来(0<=x<=na,0<=y<=nb),条件。·f[i][j]:用a中的前i个字符,b中的前j个字符,去构成c中的前i+j个字符,最小要修改的次数。是从a或b中那拿一个字符来匹配,与对应串c位置的字符不相同则值+1,相同则直接转移过来。
2024-12-06 13:13:38
195
原创 补题记录 1
知道了各情况下的ans算法了,剩下的就是老套路了,求组合数直接拍模版,用线性递推的快一点。关键的地方来了:check()函数的实现。而且,对于问题:数组a中是否存在长度为L的顺子?在这个问题中,随着变量L的增大,答案满足单调性。给定顺子长度L下数组a中实际贡献的顺子中部分的。特别注意k
2024-12-02 11:08:26
145
原创 花盆模型(ABC379-D)
我们假设在最开始时加入一个花盆,并且不去收割,开一个数组h,用来记录下每次查询完后这株植物的高度。维护好这株植物的高度后,对于有加入花盆的第i次查询,记录下序号i,设当下查询次寻为j,将会有 h[j]-h[i] 为第i次询问下种下的植物的当前高度。简单点,暴力地开一个数组记录每个花盆里植物的高度,在查询的过程中一个个去维护其高度,这样的朴素算法的复杂度将是O(n^2)级别的,在2e5的数据下妥妥的超时。朴素算法的低效之出在于第二种查询去维护每株植物的高度,复杂度为O(n),这对于本题要求下是不够快的。
2024-11-28 11:23:22
231
原创 D - 88888888
p=998244353,是质数,vn%p只需要求一下分母的逆元即可。分母于p互质,满足飞马小定理,故可以用其求逆元。再用一下这个结论就OK了。
2024-09-12 21:02:32
218
原创 Cross Explosion
线性查找上下左右四个方向看到的第一个的墙的位置复杂度O(n^2),在Q取到2e5的情况下直接爆掉。这里应使用二分查找,对某一行、列进行二分,使用set实现墙的位置存储。prev(it) :返回it的前一个元素迭代器。
2024-09-10 16:38:56
268
原创 P1509 找啊找啊找GF
需要开两个数组f,dp,分别代表给定人品,钱能get到的最多MM数量,确保最多数量下的最少时间花费。将人品,钱作为两个限制维度,将每个MM数量视作1,走背包f,更新f的同时去更新dp。题目要求不单单是求最小时间,还要保证MM数量最多。24/8/30 距离开学只剩2天😣😔😲🙂↔️。人才出题人,挺会整活的。
2024-08-30 20:54:25
236
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人