CF 316G3 Good Substring SAM上的简单计数
来源:互联网 发布:如何关闭蜂窝移动数据 编辑:程序博客网 时间:2024/04/29 17:36
题目大意
给你一个长度为
解题思路
看到这题,一个很直接的思路就是用SAM来做,我们可以先建出
程序
//YxuanwKeith#include <cstring>#include <cstdio>#include <algorithm>using namespace std;const int MAXN = 6e5 + 5;struct SAM { int Len, Pre, Go[27];} A[MAXN * 2];char S[MAXN];int N, Last, Root, tot, L[15], R[15], Ord[MAXN * 2], F[MAXN * 2][15];void Add(int ch, int Ord) { int np = ++ tot, p = Last; A[np].Len = A[p].Len + 1; if (Ord != -1) F[np][Ord] ++; for (; p && !A[p].Go[ch]; p = A[p].Pre) A[p].Go[ch] = np; if (!p) A[np].Pre = Root; else { int q = A[p].Go[ch]; if (A[q].Len == A[p].Len + 1) A[np].Pre = q; else { int nq = ++ tot; A[nq] = A[q]; A[nq].Len = A[p].Len + 1; A[np].Pre = A[q].Pre = nq; for (; p && A[p].Go[ch] == q; p = A[p].Pre) A[p].Go[ch] = nq; } } Last = np;}void Sort() { static int tax[MAXN]; memset(tax, 0, sizeof tax); for (int i = 1; i <= tot; i ++) tax[A[i].Len] ++; for (int i = 1; i < MAXN; i ++) tax[i] += tax[i - 1]; for (int i = tot; i; i --) Ord[tax[A[i].Len] --] = i;}void Solve() { int Ans = 0; for (int i = tot; i; i --) { int Now = Ord[i]; for (int j = 0; j <= N; j ++) F[A[Now].Pre][j] += F[Now][j]; if (!F[Now][0]) continue; bool Flag = 1; for (int j = 1; j <= N; j ++) if (F[Now][j] < L[j] || F[Now][j] > R[j]) Flag = 0; if (Flag) Ans += A[Now].Len - A[A[Now].Pre].Len; } printf("%d\n", Ans);}int main() { scanf("%s", S + 1); Root = tot = Last = 1; for (int i = 1; i <= strlen(S + 1); i ++) Add(S[i] - 'a', 0); Add(26, -1); scanf("%d", &N); for (int i = 1; i <= N; i ++) { scanf("%s%d%d\n", S + 1, &L[i], &R[i]); for (int j = 1; j <= strlen(S + 1); j ++) Add(S[j] - 'a', i); Add(26, -1); } Sort(); Solve();}
1 0
- CF 316G3 Good Substring SAM上的简单计数
- [CF 316G3]Good Substrings解题报告
- Codeforces 316G3 Good Substrings (30 points)
- G3. Good Substrings
- good计数
- bzoj2555: SubString SAM+LCT
- HDU 4416 Good Article Good sentence(SAM)
- Good Article Good sentence HDOJ4416 (SAM解法)
- hdu4416 Good Article Good sentence(SAM)
- Common Substring poj3415 (SAM解法)
- 【spoj1811】Longest Common Substring【SAM】
- 【 bzoj 2555 】SubString - LCT SAM
- cf上的pipe
- cf good bye 2015
- substring 的简单用法
- Codeforces Good Bye 2013(13年的最后一场CF)
- 一个简单的计数
- 简单的计数排序
- 脚本编译faac时出错提示缺少aclocal、autoconf、automake
- 搭建高可用mongodb集群
- error: unsupported configuration: Domain requires KVM, but it is not available. Check that virtualiz
- NIO的直接缓存区与非直接分缓存区
- c语言基本常识2
- CF 316G3 Good Substring SAM上的简单计数
- beginUpdates方法和endUpdates方法的使用
- 自定义六角形头像图片控件
- 从Dynamics CRM2011到Dynamics CRM2016的升级之路
- [课本划重点]深入理解jvm-第3章 垃圾收集器与内存分配策略(1)
- logback logback.xml常用配置详解(二)<appender>
- 动态设置Ext.form.FormPanel控件里子控件的显示和隐藏
- android LayoutInflater加载的布局大小不受控制
- LightOj 1370欧拉函数快速筛法