- 博客(278)
- 问答 (3)
- 收藏
- 关注
原创 关于字符串哈希的一点总结
字符串哈希定义f(s)f(s)f(s),表示字符串sss映射到整数的函数。fff为哈希函数。哈希函数有两个性质在 Hash 函数值不一样的时候,两个字符串一定不一样;在 Hash 函数值一样的时候,两个字符串不一定一样(但有大概率一样,且我们当然希望它们总是一样的)。Hash 函数值一样时原字符串却不一样的现象我们成为哈希碰撞。定义哈希函数公式等于(定义len(s)len(s)len(s)表示字符串sss的长度)f(s)=∑i=1len(s)int(s[i])∗b.
2022-03-03 16:10:39
1276
1
原创 Educational Codeforces Round 102 (Rated for Div. 2)
A.有且仅有两个情况获胜。全部小于d。最小的两个数字加起来小于d。//// Created by bytedance on 2021/1/23.////#include<iostream>#include<cstring>#include<algorithm>#include<cmath>#include<cstdlib>#include<climits>#include<stack>#incl
2021-02-08 18:26:02
186
原创 Codeforces Round #695 (Div. 2) E. Distinctive Roots in a Tree
考虑树上dp。down[u]down[u]down[u]表示以u为根结点,向下的最小代价。up[u]up[u]up[u]表示以u为根结点,向上的最小代价。每一次更新向下的时候,如果字节点不行,那他自己肯定不行。如果字树内有一个和u相同,肯定不行。向上更新的时候,假设uuu的父亲节点是fff,首先我们需要删除掉u从f的子树中。然后判断除了u和他的子树以外,是否有和u相等的点。再继承父亲节点的up[u]up[u]up[u]值。这里使用了主席树去查询。//// Created by bytedance
2021-01-25 21:27:24
163
原创 Educational Codeforces Round 8 D. Magic Numbers
主要是特判A的情况,其他因为A,B长度一样很多情况都省略掉了。#include<iostream>#include<cstring>#include<algorithm>#include<cmath>#include<cstdlib>#include<climits>#include<stack>#include<vector>#include<queue>#include<
2020-12-17 17:16:02
175
1
原创 P2495 [SDOI2011]消耗战
#include<iostream>#include<cstring>#include<algorithm>#include<cmath>#include<cstdlib>#include<climits>#include<stack>#include<vector>#include<queue>#include<set>#include<bitset>#
2020-12-17 13:10:03
106
原创 吉哥系列故事——恨7不成妻 HDU - 4507
#include<iostream>#include<cstring>#include<algorithm>#include<cmath>#include<cstdlib>#include<climits>#include<stack>#include<vector>#include<queue>#include<set>#include<bitset>#
2020-12-17 11:18:04
119
原创 第 45 届国际大学生程序设计竞赛(ICPC)亚洲区域赛(上海) C Sum of Log
需要注意从0开始的细节。#include<iostream>#include<cstring>#include<algorithm>#include<cmath>#include<cstdlib>#include<climits>#include<stack>#include<vector>#include<queue>#include<set>#include<
2020-12-16 23:47:15
297
1
原创 The 2018 ICPC Asia Xuzhou Regional Contest
#include<iostream>#include<cstring>#include<algorithm>#include<cmath>#include<cstdlib>#include<climits>#include<stack>#include<vector>#include<queue>#include<set>#include<bitset>#
2020-12-15 22:29:17
175
1
原创 牛客挑战赛46 C
概率就是组合数分之一,现在需要求组合数有多少。因为是排列,每一次长度加1,就是第i个插入的过程,考虑dp[i][j][k]dp[i][j][k]dp[i][j][k]表示第iii个数字插入到kkk的位置,逆序数是j逆序数是j逆序数是j。分段转移(因为超级逆序数表示aI>aj+1a_I>a_j+1aI>aj+1):当i−1<ki-1<ki−1<k的时候,有dp[i][j][k]=∑m=0m=k−1dp[i−1][j−i+k][m]dp[i][j][k]=\sum
2020-12-15 10:58:02
208
1
原创 牛客挑战赛46 F
可以很显然的发现,答案等于∑disti,root−all(lca(l,l+1,l+2,,,,r))\sum{dist_{i,root}}-all(lca(l,l+1,l+2,,,,r))∑disti,root−all(lca(l,l+1,l+2,,,,r))其中我们可以使用线段树取[l,r]lca[l,r]lca[l,r]lca。每一个点到根的和,我们考虑先离线,再accessaccessaccess过程。每一次打通一条链,就要把这条链上,已经遍历过的点到该链的链头的距离给剪掉。在随便使用一个数据结构
2020-12-15 10:50:59
199
原创 计蒜客42552
计算重心#include<iostream>#include<cstring>#include<algorithm>#include<cmath>#include<cstdlib>#include<climits>#include<stack>#include<vector>#include<queue>#include<set>#include<bitset&
2020-12-06 22:41:03
104
原创 Codeforces Round #668 (Div. 2) E
E - Fixed Point Removal每一个数字,能够被删除,当且仅当满足:posi−ai−x<=0pos_i-a_i-x<=0posi−ai−x<=0其中x是他之前已经被删掉的数字的个数。(因为我们总可以在posi−ai−x==0pos_i-a_i-x==0posi−ai−x==0的时候,将该数字删除,所以小于等于0的时候一定满足。)令a[i]=i−a[i]a[i]=i-a[i]a[i]=i−a[i]。(这个时候的a[i]a[i]a[i]就表示成,若他自己能被删除的话
2020-09-10 19:40:44
99
原创 888G - Xor-MST
#include<iostream>#include<cstring>#include<algorithm>#include<cmath>#include<cstdlib>#include<climits>#include<stack>#include<vector>#include<queue>#include<set>#include<bitset>#
2020-09-09 10:21:28
153
原创 Educational Codeforces Round 94 (Rated for Div. 2)
A - String Similarity可以发现,string里面的最后一位每一次都会被遍历到,所以将res全部变成最后一位即可。#include<iostream>#include<cstring>#include<algorithm>#include<cmath>#include<cstdlib>#include<climits>#include<stack>#include<vector>
2020-09-08 17:30:02
159
原创 Codeforces Round #668 (Div. 2)
A - Permutation Forgery倒序输出即可。#include<iostream>#include<cstring>#include<algorithm>#include<cmath>#include<cstdlib>#include<climits>#include<stack>#include<vector>#include<queue>#include<
2020-09-07 12:08:31
150
原创 Educational Codeforces Round 93 (Rated for Div. 2)
A - Bad Triangle最小的两边和小于等于最大的边,那么就一定不会存在这个三角形。否则,一定存在。#include<iostream>#include<cstring>#include<algorithm>#include<cmath>#include<cstdlib>#include<climits>#include<stack>#include<vector>#include&l
2020-09-02 22:22:03
128
原创 Codeforces Round #664 (Div. 2)
A - Boboniu Likes to Color Balls 判断奇偶。由题意可得,最多一个奇数。r,g,b同时减一,奇偶互换。w加3,导致奇偶改变。而又因为加上偶数,奇偶性质不变,所以我们只需要观察原来的rgbw,和操作一次的rgbw。#include<iostream>#include<cstring>#include<algorithm>#include<cmath>#include<cstdlib>#include<
2020-08-31 11:37:59
141
原创 Codeforces Round #662 (Div. 2)
A - Rainbow Dash, Fluttershy and Chess Coloring打表找规律#include<iostream>#include<cstring>#include<algorithm>#include<cmath>#include<cstdlib>#include<climits>#include<stack>#include<vector>#include<
2020-08-31 11:15:14
137
原创 A Ancient Distance
#include<iostream>#include<cstring>#include<algorithm>#include<cmath>#include<cstdlib>#include<climits>#include<stack>#include<vector>#include<queue>#include<set>#include<bitset>#
2020-08-17 20:44:33
154
原创 C Count New String
从后往前看,可以发现,当前字母是ccc,当前位置ppp,最多能影响到p′p'p′,得到[p,p′][p,p'][p,p′]区间,把所有ccc字母影响区间合并在一起,可以得到[L,R]<=[1,n][L,R]<=[1,n][L,R]<=[1,n],即每个字母最多影响长度为n的区间,所以我们把所以的后缀拿出来建立广义后缀自动机(实际先建立tire树)即可。#include<iostream>#include<cstring>#include<algorith
2020-08-17 20:36:39
165
原创 Educational Codeforces Round 92 (Rated for Div. 2) A-F
数学和细节题十分不行的我,这场被打懵了。wa到自闭。A因为对两个数字求lcmlcmlcm,至少需要小的数字乘以二。所以我们针对每个区间端点,乘以二,判断是否在内即可。#include<iostream>#include<cstring>#include<algorithm>#include<cmath>#include<cstdlib>#include<climits>#include<stack>#i
2020-08-07 17:51:07
118
原创 Longest Common Substring II
建立广义后缀自动机,然后在parent树上更新答案。#include<iostream>#include<cstring>#include<algorithm>#include<cmath>#include<cstdlib>#include<climits>#include<stack>#include<vector>#include<queue>#include<set&g
2020-08-06 16:46:08
114
原创 P5212 SubString
强制在线求不同字符串。由于sam中有添加边,和删除边的操作,所以我们考虑使用lct来维护sam。#include<iostream>#include<cstring>#include<algorithm>#include<cmath>#include<cstdlib>#include<climits>#include<stack>#include<vector>#include<queu
2020-07-31 20:52:19
122
原创 生成魔咒 LibreOJ - 2033
sam上dp。可以将trans[s,c]看成是边,整个sam就是一个dag图。我们令dp[u]表示u结尾的,不同字串个数有多少即可。#include<iostream>#include<cstring>#include<algorithm>#include<cmath>#include<cstdlib>#include<climits>#include<stack>#include<vector>
2020-07-31 15:18:16
145
原创 Codeforces Round #660 (Div. 2)
A首先前三个符合题意的数字是 666 101010 141414(2∗3,2∗5,2∗7)(2*3 ,2*5,2*7)(2∗3,2∗5,2∗7)那么最小的数字一定需要大于30,因为n必须由正整数组成。所以我们可以一开始放置666 101010 141414三个数字,然后再使用n-30即可。注意因为数字不能相同,所以需要判断一下,有相同的数字的话将14换成15。因为10−6=4,14−10=410-6=4,14-10=410−6=4,14−10=4故某一个数字增大了1,那么不可能再有相等的数字存在。
2020-07-31 15:14:59
117
原创 广州大学第十四届ACM大学生程序设计竞赛 J 登顶
当前我们执行到第iii位置的时候,我们以iii结尾的字串,一共有iii个。分别是[1,i],[2,i],[3,i]..[i,i][1,i],[2,i],[3,i]..[i,i][1,i],[2,i],[3,i]..[i,i]然后令单调栈mx,mnmx,mnmx,mn保存最大值和最小值。我们可以发现的是,以某一个点为终点后,每一个最大/小值是向前作用的。并且具有单调性,即,[j,i][j,i][j,i]的最大值是kkk,那么[1,j−1][1,j-1][1,j−1]的最大值就不会小于kkk。所以利用单调栈保
2020-07-29 00:21:51
258
原创 Codeforces Round #659 (Div. 2)
A因为最大相似长度是50,所以一开始令初始数组为50个a,然后不断利用相似度,每一个先复制相似度长度的字符,然后令后续字符ascii加1模上26,即可保证不同。#include<iostream>#include<cstring>#include<algorithm>#include<cmath>#include<cstdlib>#include<climits>#include<stack>#includ
2020-07-28 22:52:31
94
原创 2020牛客暑期多校训练营(第二场) A All with Pairs
求第iii个字符串的前缀最大能与所有的字符串的后缀匹配长度的平方和。首先,字符串匹配相等的问题可以考虑字符串hash。这道题我们发现,hash所有的字符串需要∑(len(si))\sum(len(s_{i}))∑(len(si)),是可以接受的。那么我们首先进行字符串的hash,统计每一个hash值有多少个。然后从头开始暴力所有的字符串,需要时间∑(len(si))\sum(len(s_{i}))∑(len(si)),针对前缀第i个串第j个结尾的s[i][j]s[i][j]s[i][j],贡献应该为:
2020-07-15 16:11:23
167
原创 2020牛客暑期多校训练营(第二场) G Greater and Greater
我们需要求的是,考虑A数组的以第i个结尾的字串,长度为mmm,是否满足A[i]>=B[i]A[i]>=B[i]A[i]>=B[i]。假设令dp[i][j]=1,0dp[i][j]={1,0}dp[i][j]=1,0表示,A数组以第i个结尾时,长度为j的字串是否满足条件。就有dp[i][j]dp[i][j]dp[i][j]=(A[j]>=B[k])(A[j]>=B[k])(A[j]>=B[k])&dp[i−1][k−1]k=1,2,3,..,jdp[i-1][k-
2020-07-15 16:00:18
188
原创 2020牛客暑期多校训练营(第二场) H Happy Triangle
这道题可以用splaysplaysplay等平衡树操作,我利用的线段树。直接思考如何判断三角形成立,即小的两边和大于第三边即可。那么对于找到的三元组{x,a,bx,a,bx,a,b}就有如下的判断(默认a<ba<ba<b)1.x<ax<ax<a&&x<bx<bx<b得到x+a>bx+a>bx+a>b就有x>b−ax>b-ax>b−a2.x>ax>ax>a&&x&l
2020-07-15 15:42:41
146
原创 2020牛客暑期多校训练营(第二场)J Just Shuffle
首先通过第k个,我们可以发现置换规则。可以发现每一个环和他的长度。然后思考怎么通过第k个,找到第一个。对于每一个环而言,他转动k次的效果等于k%len(len是环的长度)记为t(t<=len),现在从t出发,还原到第一次转动。可以考虑成再模len的意义下,t∗t−1t*t^{-1}t∗t−1=1,即t关于len的逆元。于是求出逆元,再转动一次即可。#include<iostream>#include<cstring>#include<algorithm>#
2020-07-15 15:32:18
142
原创 2020牛客暑期多校训练营(第二场) C Cover the Tree
假设叶子节点是L个。首先可以证明下界是L+12\frac{L+1}{2}2L+1。所以我们先把叶子节点抽出来,然后通过dfs序排序好。记为[1,L][1,L][1,L]然后连接[i,i+L2](i<=L2)[i,i+\frac{L}{2}](i<=\frac{L}{2})[i,i+2L](i<=2L)我们假设有一颗子树,他的叶子节点编号是[l,r][l,r][l,r],假设r<L/2r<L/2r<L/2那么该子树到根节点的链,肯定会被[l,l+L2][l,l+
2020-07-15 15:20:12
142
原创 2020牛客暑期多校训练营(第二场) F Fake Maxpooling
这个题目本质是求,加入给一个长度为n的区间,求区间内,长度为k内的最大值是多少。因为题目时间限制,不能直接用线段树等。于是关于最大值我们思考到了单调栈。但是单调栈只能处理区间[0,r]的最大值。所以我们还需要移动左指针,保证区间长度是k。故使用双端队列。队列中单调递减。队头保证在区间[r-k+1,r]中,队尾保证单调性正确。每一次取队头元素即可。所以这道题我们预处理,先预处理n行,每一行中每一个点的区间最大值是多少,再计算每一列中,最大值是多少(使用行的最大值,这样只有k个)。#include<
2020-07-15 15:12:52
101
原创 2020牛客暑期多校训练营(第一场)A B-Suffix Array
首先是题解的做法#include<iostream>#include<cstring>#include<algorithm>#include<cmath>#include<cstdlib>#include<climits>#include<stack>#include<vector>#include<queue>#include<set>#include<bit
2020-07-15 15:07:30
197
1
原创 Codeforces Round #446 (Div. 1) C - Envy
由krus求MST可以知道,我们将边集合按照权值大小排序,从小到大贪心的取,其中可以发现,如果权值=x的边,被选取,那么所有权值等于=x的边对应的点应该全部在当前构建的MST中。即,权值相等的边集,在构建MST的过程中,对应点集保持一致。所以我们这道题目按照权值sort一遍,然后再离线保存下来查询的边,将查询的边也按照边权排序。然后每一次加入查询的边,先把小于当前查询的边的权值插入,然后再插入询问的边,最后恢复并查集到之前的状态即可。#include<iostream>#include&l
2020-07-10 19:18:28
194
原创 P3402 可持久化并查集
继续打打板子热热手。#include<iostream>#include<cstring>#include<algorithm>#include<cmath>#include<cstdlib>#include<climits>#include<stack>#include<vector>#include<queue>#include<set>#include<b
2020-07-10 16:18:42
90
原创 A - Coloring Roads Gym - 102059A
用lct中的access操作来维护链。因为每一次更新到根节点所以不用split操作。注意下传标记和统计的时候影响。#include<iostream>#include<cstring>#include<algorithm>#include<cmath>#include<cstdlib>#include<climits>#include<stack>#include<vector>#includ
2020-07-10 14:44:49
160
原创 Open cup 2019 Korea Gym 102059A Coloring Roads
树链剖分。先做轻重链剖分后,维护每一条链上的信息。初始树为空。以每一条重链的头top为基点,建立单调栈。栈内维护,从大到小,该链上修改的深度,以及对应颜色。每一次修改,如果栈内有比他浅的点,即,若我们把当前的颜色涂上,会使得之前的颜色覆盖掉,故我们清除掉该颜色。不断弹栈,直到为空或者栈顶比他深度深。若栈顶比他深,优先修改,当前的颜色的深度,即,把深度更深的颜色,给修改为空,我们才能重新计算并且涂上颜色。然后每一个跳top的father的时候,我们单独把所有的,这样的top-father拿出来计算即可
2020-07-09 19:59:11
216
原创 Multi-University Training Contest L - Wavel Sequence
在多校前,练练手,发现自己真的好菜。一开始队友开了签到题,我随便一看看到了M,然后写了一个待修主席树,然后呢大概长这个样子#include<iostream>#include<cstring>#include<algorithm>#include<cmath>#include<cstdlib>#include<climits>#include<stack>#include<vector>#in
2020-07-09 19:10:09
151
原创 [FJOI2015]火星商店问题
线段树分治。以时间轴建立线段树,每一个线段树节点,存放[L,R]时间内,有影响的操作1,建立可持久化trie树,trie树以商店位置为root,就可以支持商店的区间查询,然后将操作0,按照商店位置排序,进行线段树分治,每次到一个节点,先把操作0插入trie树,然后把所有当前时间内存的有影响的操作1全部拿出来,进行查询即可。#include<iostream>#include<cstring>#include<algorithm>#include<cmath&
2020-07-08 18:31:25
154
空空如也
HUD 1465 想请问一下为什么这两个代码一个能过一个不能过
2018-12-27
uva 11922 为什么一直答案错误
2018-12-22
TA创建的收藏夹 TA关注的收藏夹
TA关注的人