随笔分类 - all—好题
摘要:A题意:给定字符串s,求无重复字符子序列个数(子序列相同位置不同算不同) 在最后加一串a~z表示选了这些就是不选这个字符了,然后答案就是每次选每个字符位置的方案数的积 cpp include include using namespace std; const int N=100005,mod=1e
阅读全文
摘要:把三个串加上ASCII大于z的分隔符连起来,然后求SA 显然每个相同子串都是一个后缀的前缀,所以枚举s1的每个后缀的最长和s2相同的前缀串(直接在排序后的数组里挨个找,最近的两个分别属于s1和s2的后缀的height一定是最长符合要求的前缀),然后判断一下这个子串里最早出现的和s3相同的子串的位置,
阅读全文
摘要:圆方树不仅能解决仙人掌问题(虽然我仙人掌问题也没用过圆方树都是瞎搞过去的),还可以解决一般图的问题 一般图问题在于缩完环不是一棵树,所以就缩点双(包括双向边) 每个方点存他所在点双内除根以外的点的最小权值,这样的好处是更新原点的时候不用更新它一圈的方点,只更新父亲即可 树剖维护,然后查的时候如果lc
阅读全文
摘要:考虑静态怎么做:枚举右边界,然后枚举上边界,对应的下边界一定单调不降,单调栈维护每一列从当前枚举的右边界向左最长空位的长度,这样是O(nm)的 注意到n =m,所以m include using namespace std; const int N=4000005; int n,m,Q,len[N'
阅读全文
摘要:用SA求出height数组,然后发现每个height值都有一个贡献区间(因为点对之间要依次取min) 用单调栈处理出区间,第一问就做完了 然后用并查集维护每个点的贡献(?),从大到小枚举height,因为这样区间是不断增大的所以并查集合并即可 cpp include include include
阅读全文
摘要:参考:https://www.cnblogs.com/2016gdgzoi509/p/8999460.html 列出生成函数方程,g(x)是价值x的个数 $$ f(x)=g(x) f^2(x)+1 $$ +1是f[0]=1 根据公式解出 $$ f(x)=\frac{1+( )\sqrt{1 4 g(
阅读全文
摘要:要判边界!!要判边界!!要判边界!!if(j!=m)!!! 我真是zz横着转移要判断到底能不能向右边出边…… 然后剩下的和1814差不多,九十因为不要求经过所有格子,所以左右括号随时可以合并,但是注意合并的时候轮廓线上不能有别的括号,然后还有是(0,0)可以转移到(0,0),相当一不经过这个格子
阅读全文