2021杭电多校第四场

    阅读全文
MorphLing's avatar
MorphLing 8月 02, 2021

2021杭电多校第三场

03. Forgiving Matching题意:给出长度为n的原串S和模式串T,串由’1’,’2’,…,’9’和通配符’*’构成,问对于$k\in[0,n-1]$,S的子串中满足失配位置小于等于k的子串个数 用FFT/NTT卷积计算字符匹配数。单独考虑每个字符,如字符’1’,将S和T串根据位置上是否为’1’转化为一个0/1串,若$s[i]=t[j]=1$,则开始位置在$i-j+1$的子串匹配数+1,用数组$cnt[i]$记录开始位置在$i$的子串的匹配数,有$cnt[i]=\sum\limits_{j=1}^ns[j]t[j-i+1]$。 将T串反置为T’,即$t[j-i+1]=t’[n-(j-i+1)+1]=t’[n-j+i]$,就有$cnt[i]=\sum\limits_{j=1}^ns[j]t’[n-j+i]$,发现这个东西就可以用卷积计算了。$cnt[i]$的结果在卷积之后$n+i$的位置。 还需要注意的是通配符的处理,可以用一个容斥计算通配符的影响,将每个位置的结果直接加上两个串同通配符的总数,然后减去两个通配符相匹配的情况,两个通配符相匹配的情况计算方法同上。     阅读全文
MorphLing's avatar
MorphLing 7月 30, 2021

2021牛客多校第四场

B. Sample Game题意:有一个随机数生成器,每个数生成的概率为$p_i$,不断生成直到最后一个数小于先前的任意一个数时停止,共生成x个数,问$x^2$的期望 首先可以把$x^2$分解为$1+3+\cdots+(2x+1)$,即从每一步的增量考虑转移方法,若当前长度为x,则增量为2x+1,考虑增量的期望$E(2x+1)=2E(x)+1$,于是只要借助$E(x)$就能进行转移了 因此可以先处理出$f[i]$表示第一个数为$i$时的期望长度$E(x)$,$f[i]=(\sum\limits_{j=i+1}^nf[j]p_j+p_if[i]+\sum\limits_{j=1}^{i-1}p_j)+1$ 再通过$f[i]$计算$f2[i]$,表示第一个数为$i$时长度平方的期望$E(x^2)$,$f2[i]=\sum\limits_{j=i+1}^n p_j(f2[j]+2f[j]+1)+p_i(f2[i]+2f[i]+1)+4\sum\limits_{j=1}^{i-1}p_j$ 答案为$ans=\sum\limits_{i=1}^nf2[i]p_i$     阅读全文
MorphLing's avatar
MorphLing 7月 28, 2021

2021牛客多校第三场

自闭场,题都没读几道 B. Black and white题意:给定一个n*m的棋盘,起初全白,将一个格子染黑需要代价$a[i][j]$,若某个矩形的四个角里有三个已经是黑色,则将第四个角染黑不需要任何代价,问将整个棋盘染黑的最小代价 转化为一个联通性问题,点1~n代表1~n行,点n+1~n+m代表1~m列,i和j+n之间连一条边权为$a[i][j]$用的边。$(i,j+n)$联通代表$(i,j)$​这个格子已被染黑,于是将整个棋盘染黑等价于整张图联通,即求该图的最小生成树 为啥问题等价呢,考虑$(i,j)$联通的两种可能性: $(i,j+n)$​​连了一条边,说明直接染黑 $(i_1,j_2)$​通过一些中间边如$(i_1,j_1),(i_2,j_1),(i_2,j_2)$​联通,意味着$(i_1,j_1),(i_2,j_1),(i_2,j_2)$已被染黑,显然这四个点构成矩形的四个角,$(i_1,j_2)$可以不花费代价染黑     阅读全文
MorphLing's avatar
MorphLing 7月 25, 2021

2021杭电多校第二场

I love tree题意:给一棵树,每次操作选择一条链,从起点到终点点权依次增加$1^2,2^2,…n^2$,单点询问当前点权​ 容易想到树剖,然后考虑在线段树上维护这个问题 发现可以转化成选择一段区间$[l,r]$,对于每个点$x$,该位置增加的值为$(x-h)^2$​​,把平方项展开后得到$x^2+h^2-2xh$​,对这三项分别线段树维护即可(分别维护$x^2,-2x$​出现的次数和$h^2$的和) 有时候dfs序和修改顺序是反的,就是对于区间$[l,r]$​,每个点增加量分别是$n^2,(n-1)^2,…,1^2$​,实际上就是每个位置增加量变为$(h-x)^2$​​,h为r+1,而显然$(x-h)^2=(h-x)^2$​,因此这种情况下线段树不需要进行任何修改,只要调整传入的h参数即可 树剖时还需要稍微注意的是,这里对链的修改存在先后顺序,常规的树剖对于两个端点x,y是一起往上跳的,那么这里只在x往上跳时修改,y往上跳时先用vector记录哪些点需要修改,等x修改完再去修改y     阅读全文
MorphLing's avatar
MorphLing 7月 24, 2021

2021杭电多校第一场

06. Xor sum07. Pass!09. KD-Graph10. zoto题意:给出一个序列,离线查询m个区间$[l_i,r_i]$中,在数值区间$[d_i,u_i]$中有多少个不同的数,n=1e5 首先考虑在数值区间上维护问题,也就是维护一个支持单点修改和区间查询的数据结构,很容易想到用线段树之类的方法实现$O(\log n)$的修改和查询 离线查询若干个区间,可以再想到莫队算法,每次修改复杂度$O(\sqrt n)$​,查询$O(1)$​,将上述两种结构合并后发现,修改复杂度达到了$O(\sqrt n\log n)$​,显然超时 于是为了使总复杂度限制在$O(n\sqrt n)$​,需要在数值区间上维护一个$O(1)$​修改,$O(\sqrt n)$​查询的做法,这个方法就是分块,维护$num[i]$记录数i出现的次数,$sum[i]$​记录第i个块中不同数的个数,两者合并起来刚好是$O(n\sqrt n)$     阅读全文
MorphLing's avatar
MorphLing 7月 20, 2021

2021牛客多校第二场

B. CannonG. League of Legends题意:给定n个区间,要求将它们分成k组,每组之间有交,最大化每组交长度之和 简化问题,对于如果一个大区间能够完整包含某个小区间,则该大区间只有两种最优决策: 单独归为一组,贡献r-l 与任意一个其包含的小区间归为一组,不对结果产生影响 可以用反证法证明结论,假如大区间和其他区间归为一组,那么将该大区间移出该组,该组的交一定不下降,再放入其包含的小区间组中,小区间所在的组的交也不下降,即大小区间在同一组的决策一定最优 于是可以把所有大区间取出来,单独讨论所有小区间,可以发现,若将剩下的区间按照左端点从小到大排序,其右端点也一定是有序的,接着考虑dp,$f[i][j]$​表示考虑前i个区间,分成j组的最优答案,而一组的贡献只与最左和最右两个区间相关,显然有转移$f[k][j+1]=\max\limits_{r[i+1]-l[k]>0} \{f[i][j]+r[i+1]-l[k]\}$     阅读全文
MorphLing's avatar
MorphLing 7月 20, 2021

2021牛客多校第一场

A. Alice and Bob题意:给出两堆石子a、b,两名玩家轮流取石子,取法是在一堆石子里取k个,并在另一堆石子里取$s\times k$个$(s\ge 0)$,给定a、b,问先后手谁必胜 观察得到,对于一堆石子为i个,那么只有最多一个对应的j,使得两堆石子为i、j时为必败态,于是必败态总数不超过n。对于每一个必败态,先枚举k,再枚举s,得到所有能一步达到该状态的必胜态,复杂度为调和级数$O(n\log n)$     阅读全文
MorphLing's avatar
MorphLing 7月 18, 2021

AC自动机

P3808 【模板】AC自动机(简单版)     阅读全文
MorphLing's avatar
MorphLing 7月 15, 2021

Manacher

P3805 【模板】manacher 算法     阅读全文
MorphLing's avatar
MorphLing 7月 15, 2021