自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(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 1028 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 134

原创 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 105

原创 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 99 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 72

原创 吉哥系列故事——恨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 68

原创 第 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&lt

2020-12-16 23:47:15 227 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 122 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 129 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 148

原创 计蒜客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 54

原创 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 75

原创 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 80

原创 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&gt

2020-09-08 17:30:02 104

原创 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&lt

2020-09-07 12:08:31 95

原创 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 92

原创 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&lt

2020-08-31 11:37:59 91

原创 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 82

原创 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 108

原创 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 109

原创 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 91

原创 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 87

原创 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 82

原创 生成魔咒 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 102

原创 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 70

原创 广州大学第十四届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 209

原创 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 69

原创 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 117

原创 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 106

原创 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 96

原创 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 96

原创 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 91

原创 2020牛客暑期多校训练营(第二场) F Fake Maxpooling

这个题目本质是求,加入给一个长度为n的区间,求区间内,长度为k内的最大值是多少。因为题目时间限制,不能直接用线段树等。于是关于最大值我们思考到了单调栈。但是单调栈只能处理区间[0,r]的最大值。所以我们还需要移动左指针,保证区间长度是k。故使用双端队列。队列中单调递减。队头保证在区间[r-k+1,r]中,队尾保证单调性正确。每一次取队头元素即可。所以这道题我们预处理,先预处理n行,每一行中每一个点的区间最大值是多少,再计算每一列中,最大值是多少(使用行的最大值,这样只有k个)。#include<

2020-07-15 15:12:52 71

原创 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 123 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 134

原创 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 67

原创 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 117

原创 Open cup 2019 Korea Gym 102059A Coloring Roads

树链剖分。先做轻重链剖分后,维护每一条链上的信息。初始树为空。以每一条重链的头top为基点,建立单调栈。栈内维护,从大到小,该链上修改的深度,以及对应颜色。每一次修改,如果栈内有比他浅的点,即,若我们把当前的颜色涂上,会使得之前的颜色覆盖掉,故我们清除掉该颜色。不断弹栈,直到为空或者栈顶比他深度深。若栈顶比他深,优先修改,当前的颜色的深度,即,把深度更深的颜色,给修改为空,我们才能重新计算并且涂上颜色。然后每一个跳top的father的时候,我们单独把所有的,这样的top-father拿出来计算即可

2020-07-09 19:59:11 170

原创 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 105

原创 [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 124

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除