题目分析: 这道题的难点在于要取模,而题面没有写. 容易想到一个O(1E7)的dp.KMP或者哈希得到相关位置然后对于相关位置判断上一个位置有多少种情况. 代码: #include<bits/stdc++.h> using namespace std; ; ; int n; string str; ][]; ]; ; struct hnum{ int base; unsigned ]; unsigned ]; }h[]; void read(){ ios::sync_with_stdio(fa…
原文链接www.cnblogs.com/zhouzhendong/p/UOJ373.html 前言 真是一道毒瘤题.UOJ卡常毒瘤++.我卡了1.5h的常数才过QAQ Orzjry 标算居然是指数做法. 题解 1. 感受一下线图上点的含义 1.1 一阶线图 L(G) 上的一个点对应 G 中的一条边. 1.2 二阶线图 $L^2(G)$ 上一个点对应 G 中的一条包含 3 个节点的路径. 1.3 三阶线图 $L^3(G)$ 上一个点对应 G 中的一朵4个节点的菊花或者一条包含 4 个节点的路径,在…
题意 题目链接 Sol \(f[i][j]\)表示匹配到第\(i\)个串,当前在主串的第\(j\)个位置 转移的时候判断一下是否可行就行了.随便一个能搞字符串匹配的算法都能过 复杂度\(O(|S| K a_i)\) #include<bits/stdc++.h> #define Pair pair<int, int> #define MP(x, y) make_pair(x, y) #define fi first #define se second //#define int l…
嘟嘟嘟 现在看到字符串就想到SAM,所以很担心kmp啥的会不会忘了-- 这题感觉挺暴力的:首先当然要把\(s\)建成SAM,然后令\(dp[i][j]\)表示到第\(i\)组时,SAM上节点\(j\)能匹配的字符串个数. 转移的时候暴力枚举起点节点\(p\),然后每一次都把当前字符串放上去跑,如果在SAM上存在的话,令结束节点为\(x\),则有\(dp[i][x] += dp[i - 1][p]\). 那么最后的答案就是\(\sum _ {i = 1} ^ {cnt} dp[m][i] * si…
题意 小豆参加了生物实验室.在实验室里,他主要研究蛋臼质.他现在研究的蛋臼质是由k个氨基酸按一定顺序构成的.每一个氨基酸都可能有a种碱基序 列si_j 构成.现在小豆有一个碱基串s,小豆想知道在这个碱基上都多少中不同的组合方式可能得到这个蛋白质.即求由k段字符串有序合并成的字符串s1,有多少种不同方式能够匹配字符串s,其中k段字符串的选法不同,或者与s匹配上的位置不同认为是不同的方式. \(1 ≤ k ≤ 100, |s| ≤ 10000,a_i ≤ 10\) 分析 参照scarlyw的题解.…
题目链接 洛谷P4591 题解 设\(f[i][j]\)表示前\(i\)个串匹配到位置\(j\)的方案数,匹配一下第\(i\)个串进行转移即可 本来写了\(hash\),发现没过,又写了一个\(KMP\),依旧\(WA\),无奈去翻题解,竟然要取模??!! 题面怎么不讲啊,, #include<algorithm> #include<iostream> #include<cstring> #include<cstdio> #include<cmath&…
题目 为什么没人用\(SAM\)啊 我们先把原来的模式串建一遍\(SAM\),之后我们就可以求出\(SAM\)上每一个节点的\(|endpos|\)就可以知道每一个子串出现的次数了,也就是在模式串上的匹配数了 之后我们设\(dp[i][j]\)表示前\(i\)个里组合出的子串在\(SAM\)上匹配到了\(j\)位置的方案数是多少,转移的时候就枚举每一个子串以及\(SAM\)上的每一个节点之后跑匹配就好了 最后的答案就是 \[\sum_{i=1}^{cnt}dp[m][i]\times sz[i]…
「学习笔记」字符串基础:Hash,KMP与Trie 点击查看目录 目录 「学习笔记」字符串基础:Hash,KMP与Trie Hash 算法 代码 KMP 算法 前置知识:\(\text{Border}\) 思路 代码 \(\text{KMP}\) 匹配 思路 代码 Trie 数据结构 01-Trie 代码 练习题 Hash Bovine Genomics 思路 代码 [TJOI2018]碱基序列 思路 代码 [CQOI2014]通配符匹配 [NOI2017] 蚯蚓排队 思路 代码 KMP See…
[BZOJ5337][TJOI2018]str(动态规划,哈希) 题面 BZOJ 洛谷 题解 就很呆... 显然按层\(dp\),如果能够匹配上就进行转移,直接哈希判断是否能够匹配就好了... #include<iostream> #include<cstdio> #include<cstring> using namespace std; #define MOD 1000000007 #define MAX 10010 #define ull unsigned lon…
[BZOJ5336][TJOI2018]party(动态规划) 题面 BZOJ 洛谷 题解 这题好神仙啊... 考虑普通的\(LCS\)的\(dp\),\(f[i][j]=\max\{f[i-1][j],f[i][j-1],f[i-1][j-1]+(A_i==B_j)\}\) 发现对于固定的\(i\)而言,随着\(j\)的增长,相邻的两个数之间的差不超过\(1\),因此直接考虑一个\(2^k\)的状态记录差分的结果. 那么设\(f[i][S]\)表示当前考虑到了第\(i\)位,\(LCS\)的\…