[洛谷P3975][TJOI2015]弦论】的更多相关文章

P3975 [TJOI2015]弦论 题目描述 为了提高智商,ZJY开始学习弦论.这一天,她在<String theory>中看到了这样一道问题:对于一个给定的长度为\(n\)的字符串,求出它的第\(k\)小子串是什么.你能帮帮她吗? 输入输出格式 输入格式: 第一行是一个仅由小写英文字母构成的字符串\(s\) 第二行为两个整数\(t\)和\(k\),\(t\)为\(0\)则表示不同位置的相同子串算作一个,\(t\)为\(1\)则表示不同位置的相同子串算作多个.\(k\)的意义见题目描述. 输…
题目大意:求一个字符串的第$k$大字串,$t$表示长得一样位置不同的字串是否算多个 题解:$SAM$,先求出每个位置可以到达多少个字串($Right$数组),然后在转移图上$DP$,若$t=1$,初始值赋成$Right$数组大小,否则赋成$1$ 卡点:无 C++ Code: #include <algorithm> #include <cstring> #include <cstdlib> #include <cstdio> #define maxn 500…
题目链接 \(Click\) \(Here\) 题目大意: 重复子串不算的第\(k\)大子串 重复子串计入的第\(k\)大子串 写法:后缀自动机. 和\(OI\) \(Wiki\)上介绍的写法不太一样,因为要同时解决两个问题. 把字符串每个前缀所在等价类的\(siz\)记为\(1\),然后在\(parent\) \(tree\)上跑一次统计,就可以求出来每一个等价类在串中出现的次数.这里采用类似后缀排序的方法,对字符串按\(len\)为关键字进行排序.至于经过每个点的路径数\(sum\),可以在…
luogu P3975 [TJOI2015]弦论 链接 bzoj 思路 建出sam. 子串算多个的,统计preant tree的子树大小,否则就是大小为1 然后再统计sam的节点能走到多少串. 然后就可以在sam的贪心的走了. 代码 #include <bits/stdc++.h> #define FOR(i,a,b) for(int i=a;i<=b;++i) #define ROF(i,a,b) for(int i=a;i>=b;--i) using namespace std…
Portal Description 给定一个\(n\times n\)的矩阵\(B\)和一个\(1×n\)的矩阵\(C\).求出一个\(1×n\)的01矩阵\(A\),使得\(D=(A×B-C)×A^T\)最大,其中\(A^T\)为\(A\)的转置.输出\(D\). Solution 先展开一波. \[\begin{align*} D &= (A×B-C)×A^T \\ &= \begin{bmatrix} \sum_{i=1}^n a_ib_{i1}-c_1 & \sum_{i…
后缀自动机入门. 题目描述 为了提高智商,ZJY 开始学习弦论. 这一天,她在<String theory>中看到了这样一道问题:对于一个给定的长度为 \(n\) 的字符串,求出它的第 \(k\) 小子串是什么.你能帮帮她吗? 输入输出格式 输入格式: 第一行是一个仅由小写英文字母构成的字符串 \(s\). 第二行为两个整数 \(t\) 和 \(k\),\(t\) 为 \(0\) 则表示不同位置的相同子串算作一个.\(t\) 为 \(1\) 则表示不同位置的相同子串算作多个.\(k\) 的意义…
题目链接 建出后缀自动机. T=0,每个子串算一次,否则每个子串算该子串的\(endpos\)集合大小次. 用\(f[i]\)表示结点\(i\)表示的\(endpos\)集合大小,则\(f[i]\)为其parent tree的子树的\(f\)之和(T=0时,f[i]均为1). 用\(g[i]\)表示从结点\(i\)出发的子串个数,则\(g[i]\)为\(f[i]\)加上结点\(i\)所有出边的\(g[v]\)之和. 类似平衡树跑第\(k\)小. #include <cstdio> #inclu…
题意:求一个串的字典序第k小的子串/本质不同第k小的子串. 解:一开始我的想法是在后缀树上找,但是不知道后缀树上的边对应的是哪些字符... 然而可以不用fail树转移,用转移边转移即可. 先建一个后缀自动机,记忆化搜索每个节点向后向后有多少个串. 然后从起点开始向后一个字符一个字符的确定. 注意每到一个新点就要判断是否结束,并把k减去在此结束的串的个数. #include <cstdio> #include <cstring> ; ], len[N], fail[N], siz[N…
思路 一眼SAM板子,结果敲了一中午... 我还是太弱了 题目要求求第k小的子串 我们可以把t=0当成t=1的特殊情况,(所有不同位置的相同子串算作一个就是相当于把所有子串的出现位置个数(endpos大小)全部赋成1) 然后讨论如何递推的求第k小的子串 首先要统计一个sum值,代表从这个状态出发能够到达多少个子串,相当于这个节点后继节点的所有值的和,反向拓扑一下能到那些节点即可 然后逐个dfs每个位置的字符是什么即可 注意 反向拓扑不一定要真的反向建边(狗头),我这么乱搞了... 可以把每个点的…
题目传送门 跳房子 题目描述 跳房子,也叫跳飞机,是一种世界性的儿童游戏,也是中国民间传统的体育游戏之一. 跳房子的游戏规则如下: 在地面上确定一个起点,然后在起点右侧画 n 个格子,这些格子都在同一条直线上.每个格子内有一个数字(整数),表示到达这个 格子能得到的分数.玩家第一次从起点开始向右跳,跳到起点右侧的一个格子内.第二次再从当前位置继续向右跳,依此类推.规则规定: 玩家每次都必须跳到当前位置右侧的一个格子内.玩家可以在任意时刻结束游戏,获得的分数为曾经到达过的格子中的数字之和. 现在小…