05 2019 档案
摘要:重写一遍很久以前写过的题。 考虑链上的问题。容易想到设f[i]为i到1的最少购票费用,转移有f[i]=min{f[j]+(dep[i]-dep[j])*p[i]+q[i]} (dep[i]-dep[j]<=l[i])。套路的考虑若j转移优于k(dep[j]>dep[k]),则f[j]-dep[j]*
阅读全文
摘要:考虑容斥,计算至少有k个极大数的概率。不妨设这k个数对应的格子依次为(k,k,k)……(1,1,1)。那么某一维坐标<=k的格子会对这些格子是否会成为极大数产生影响。先将这样的所有格子和一个数集对应起来,即将答案乘上一个组合数。然后需要考虑的就是这些格子有多少种合法排列顺序。 这个排列需要满足的是(
阅读全文
摘要:A:签到。 B:k是奇数时函数值均为1,k是偶数时每k+1个出现一个0。 C:暴力枚举横竖各切多少刀,将矩阵压成一行可以得到该情况下列的划分位置,压成一列可以得到该情况下行的划分位置,然后二维前缀和暴力验证即可。 D:打表可知10k~10k+9范围内0~9各出现一次,于是只需要计算零散部分。 先咕着
阅读全文
摘要:Day 0 完全没有明明是最后一次机会的紧张感。大概是滚粗的预兆。 住在西郊。房间好小。 和thupc前一样又有一场cometoj,好像又有小裙子了。upd:改成星空棒棒糖! Day 1 早餐有点棒。 试机赛明示有交互,感觉要和wc一样凉。t3题面明示是搬了thupc试机的t5,就手动二分一下K在第
阅读全文
摘要:考虑外向树怎么做。显然设f[i][j]为i子树中出现权值和为j的合法方案的概率,转移做树形背包即可。 如果树上只有一条反向边,显然可以先不考虑该边计算概率,再减去将整棵树看做外向树的概率。于是考虑容斥,进一步拓展到多条反向边,就是考虑0条反向边的概率-考虑1条反向边的概率+考虑2条反向边的概率……容
阅读全文
摘要:显然相当于求有不超过n-2m种颜色出现奇数次的方案数。由于相当于是对各种颜色选定出现次数后有序排列,可以考虑EGF。 容易构造出EGF(ex-e-x)/2=Σx2k+1/(2k+1)!,即表示该颜色只能选奇数个。同理有EGF(ex+e-x)/2=Σx2k/(2k)!,即表示该颜色只能选偶数个。 考虑
阅读全文
摘要:首先找出任意一条1~n的最短路径。显然删除的边只有在该最短路上才会对最短路长度产生影响。 不会证明地给出一个找不到反例的结论:删除一条边后,新图中一定有一条1~n的最短路径上存在一条边x->y,满足在原图中1~x的最短路和y~n的最短路上该删除边均不是必经边。 另一个显然的结论是,原图中经过边x->
阅读全文
摘要:A:签到。 B:太难了吧。注意到任意两数乘积不同。于是考虑问出12乘积、34乘积,由此已经可知56乘积。然后需要确定每一对的顺序,可以询问13得到13的值,再询问15得到5的值。 C:并查集。 D:贪心。左括号分给当前前缀和小的,右括号分给当前前缀和大的。 E:对于确定的右端点r,显然合法的l是一段
阅读全文
摘要:A:签到。 B:签到。背包。 C:太难了吧。先统计一下内部的AB,然后只留下首尾两字符,显然只有BB、AA、BA是有用的。把BA全部接起来,相当于至多剩下一个BA,将其接在BB前或者AA后。AABB两两配对。 D:设n=km+x(0<x<m)。则[n/m]=n%m即k=n-km k(m+1)=n 枚
阅读全文
摘要:A:签到。 B:找到第一个和最后一个有1的列,状压dp一下即可,即设f[i][0/1][0/1]为第i列为0/1,0/1时的最优方案要加多少个1。 C:容易发现子序列中一个数的贡献是2l,而只需要考虑其是否是m的倍数,于是l超过logm后就没什么意义了。于是设f[i][j][k]为前i个数选了模m为
阅读全文
摘要:Day -? 居然还能报上thupc,我在队里唯一的作用大约是cfrating稍微高点方便过审。另外两位是lz和xyy。 Day -2 我夫人生日! Day -1 lz和xyy的家长都来了带我飞。住在去年thusc住的宾馆。晚上开黑打cometoj,好像又有小裙子了。 Day 0 早上九点跑去报到,
阅读全文
摘要:首先对每张图都去掉自环。 1:给出的就是DAG。答案即为2m。 2、5:显然每个SCC之间互相独立。这两个点都满足SCC中的点很少。于是对每个SCC暴力枚举边集判环,而SCC之间的边显然选不选没有影响,每有一条边就乘2即可。 3:所有点出度都为1。构成环套树森林,处理一下环的贡献即可。 6:是一张有
阅读全文
摘要:直接利用simulator退火应该可以得到大量分数。 op=1:1,4,5,6,10 即构造序列{ai},最小化Σti,ai+rai,aj。 1:暴搜/退火。 4:观察到图大致成一条链(注意其中有两个断点,对比数字和行数就可以发现)。于是设f[i][j]为第i个任务在j号TPU上完成时,前i个任务计
阅读全文
摘要:容易想到可以转化为一个有m堆石子,石子总数不超过n-m的阶梯博弈。阶梯博弈的结论是相当于只考虑奇数层石子的nim游戏。 nim和不为0不好算,于是用总方案数减掉nim和为0的方案数。然后考虑dp,按位考虑,设f[i][j]为已确定奇数石子堆的第i位及以上的放法后,保证当前异或和为0,剩下j个石子时的
阅读全文
摘要:对反串建SAM得到后缀树,两后缀的lcp就是其在后缀树上lca的len值,于是每次询问对后缀树建出虚树并统计答案即可。
阅读全文
摘要:建出广义SAM,通过parent树对每个节点求出其是否仅被一个子串包含及被哪个包含。 写了无数个sam板子题一点意思都没啊
阅读全文
摘要:对trie建SAM,询问串倒过来跑到的节点的|right|即为答案。
阅读全文
摘要:将所有串(包括S)放一块建SAM。对于询问,倍增定位出该子串所在节点,然后要查询的就是该子串在区间内的哪个字符串出现最多。可以线段树合并求出该节点在每个字符串中的出现次数。
阅读全文
摘要:对作文库中的串建出广义SAM,然后显然可以二分答案,二分之后考虑暴力dp,设f[i]为前i位最长匹配长度,显然有f[i]=max(f[i-1],f[j]+i-j) (i-j>=l&&j+1~i能在作文库中匹配)。在SAM上跑并记录匹配长度,单调队列优化dp即可。
阅读全文
摘要:对多串建立SAM的一种方法是建trie再对trie建SAM。构造方式分为在线(也即不建trie而是依次插入每个串,或在trie上dfs)和离线(也即建好trie再bfs)。其中离线构造与单串的构造方式几乎没有区别,将父亲所在节点作为last即可,按bfs序建SAM可以避免出现要转移到的状态已经存在的
阅读全文
摘要:对多串建立SAM的一种方法是加分隔符。于是加完分隔符建出SAM。 考虑统计出每个节点被多少个串包含。让每个串各自在SAM上跑,跑到一个节点就标记(显然一定会完全匹配该节点,因为是对包含其的串建的SAM)并暴跳fail,遇到已经被该串标记过的点就停止。 这样暴力的复杂度容易感性证明是O(Lsqrt(L
阅读全文
摘要:先考虑没有动态加字符怎么做。计算每个节点的贡献,当|right|>=k时将len-lenfa计入即可。 动态加字符后,这个东西难以用LCT维护。于是考虑离线。建完SAM后,容易发现每个节点在时间上的一段后缀提供贡献,且具体时间就是其right集合中的第k小。主席树或线段树合并求出即可。
阅读全文
摘要:询问串放在SAM上不跳fail跑到的节点的|right|即为答案。用LCT维护parent树即可。可以直接维护子树信息,也可以转化为路径加。注意强制在线所使用的mask是作为参数传进去的。
阅读全文
摘要:先考虑l=1,r=n,并且不要求本质不同的情况。对原串建SAM,将询问串在上面跑,得到每个前缀的最长匹配后缀即可得到答案。 然后考虑本质不同。对询问串也建SAM,统计每个节点的贡献,得到该点right集合中任意一个的匹配长度即可。 然后考虑原问题。我们需要求的仍然只是每个前缀的最长匹配后缀。通过线段
阅读全文
摘要:对反串建SAM弄出后缀树,每个b串通过倍增定位其在后缀树上对应的节点,根据其长度将节点拆开。然后每个a串也找到对应的节点,由该节点向表示a串的节点连边,再把所给的边连上跑拓扑排序即可。
阅读全文
摘要:A:开场就读错题。读对了之后也没啥好说的。 B:swap(1B,1D)。花了1h+仍然没有比暴力更好的做法,于是信仰交了暴力神tmpp了,最后居然似乎是因为用了map或者randomshuffle而fst,更加纯粹的暴力反而过了。无法想到的结论是,如果有解,一定存在某个解k是n的因子。考虑反证,如果
阅读全文
摘要:本质不同子串数量等于所有点的len-parent树上父亲的len的和。可以直接维护。
阅读全文
摘要:二分答案后相当于判断一个区间的后缀与某个后缀的最长公共前缀是否能>=ans。建出后缀树,在上述问题中后者所在节点向上倍增的跳至len>=ans的最高点,然后相当于查询子树中是否有该区间的节点。主席树进行二维数点即可。
阅读全文
摘要:利用SAM建出后缀树,树上每个节点计算一下|right|、right集合中ai的最大、次大、最小、次小值即可。
阅读全文
摘要:对第一个串建SAM,第二个串在上面跑,记录当前前缀匹配的最长后缀长度l,每次考虑当前前缀的贡献,对于当前所在节点显然是|right|*(l-len[fa]),而对于其parent树上所有祖先的贡献显然是|right|*(len-len[fa])。预处理一下就好了。
阅读全文
摘要:先考虑相同子串视为一个。按SAM的拓扑序预处理出从每个节点开始能得到多少个本质不同子串(注意虽然一个节点对应多个子串,但到达该点时当前的子串显然是确定为其中一个的),然后按位贪心即可。 相同子串视为多个的做法也没有本质区别。求出每个节点的right集合大小,同样预处理出从每个节点开始能得到多少个子串
阅读全文
摘要:差分后即求多串LCS。先考虑两个串怎么做。对第一个串建SAM,第二个串在上面跑即可,任意时刻走到的节点表示的都是第二个串的当前前缀在第一个串中出现的最长的后缀,具体计算长度时每走一个字符长度+1,跳fail时将长度重设为当前节点maxlen即可。 扩展到多串,同样对第一个串建SAM,后面每个串在上面
阅读全文
摘要:暴力树剖做法显然,即使做到两个log也不那么优美。 考虑避免树剖做到一个log。那么容易想到树上差分,也即要对每个点统计所有经过他的路径产生的总贡献(显然就是所有这些路径端点所构成的斯坦纳树大小),并支持在一个log内插入删除合并。 考虑怎么求树上一些点所构成的斯坦纳树大小。由虚树的构造过程容易联想
阅读全文
摘要:A:注意到2和两个1几乎没有差别,因为除2外的偶数都不是质数。于是最开始放一个2,然后放奇数个1,再把2放完,最后若有1再排在最后即可。 B:考虑单组询问怎么做。设f[a][b][c]为最短的前缀长度满足能从中挑出第一种宗教的前a位、第二种宗教的前b位、第三种宗教的前c位。转移考虑最后一个被挑出的字
阅读全文