二分+单调队列优化dp+后缀自动机

//CTSC2012 熟悉的文章
#include <bits/stdc++.h>
using namespace std;
const int maxn = 1e7;
#define ll long long
char s[maxn];
struct node {
int fa;
int v;
int ch[2];
}t[maxn];
int n,m;
int siz = 1;
int rt = 1;
int lst = 1;
inline void extend(int c) {
int p = lst,np = ++siz;
t[np].v = t[p].v + 1;
for(;p && !t[p].ch[c];p = t[p].fa) {
t[p].ch[c] = np;
}
if(!p) {
t[np].fa = rt;
}
else {
int q = t[p].ch[c];
if(t[q].v == t[p].v + 1) {
t[np].fa = q;
}
else {
int nq = ++siz;
t[nq] = t[q];
t[nq].v = t[p].v + 1;
t[q].fa = t[np].fa= nq;
for(;p && t[p].ch[c] == q;p =t[p].fa) {
t[p].ch[c] = nq;
}
}
}
lst = np;
} int len[maxn];
int f[maxn]; inline void get() {
int root = rt;
int res = 0;
for(int i = 1;i <= n; ++i) {
int c = s[i] - '0';
if(t[root].ch[c]) root = t[root].ch[c],res++;
else {
while(root && !t[root].ch[c]) {
root = t[root].fa;
}
if(!root) {
root = rt;
res = 0;
}
else {
res = t[root].v + 1;
root = t[root].ch[c];
}
}
len[i] = res;
}
} int q[maxn];
int head,tail;
inline bool ok(int mid) {
head = 1;
tail = 0;
for(int i = 1;i <= n; ++i) {
f[i] = f[i - 1];
if(i - mid < 0) {
continue;
}
while(head <= tail && f[q[tail]] - q[tail] < f[i - mid] - i + mid) {
tail --;
}
q[++tail] = i - mid;
while(head <= tail && q[head] < i - len[i]) {
head ++;
}
if(head <= tail) {
f[i] = max(f[i],f[q[head]] + i - q[head]);
}
}
return f[n] * 10 >= n * 9;
} inline void binary_srch() {
get();
int l = 0,r = n;
int ans = 0;
while(l <= r) {
int mid = (l & r) + ((l ^ r) >> 1);
if(ok(mid)) {
ans = mid,l = mid + 1;
}
else r = mid - 1;
}
printf("%d\n",ans);
} int main () {
scanf("%d %d",&m,&n);
for(int i = 1;i <= n; ++i) {
scanf("%s",s+1);
int len = strlen(s + 1);
lst = rt;
for(int j = 1;j <= len; ++j) {
extend(s[j] - '0');
}
}
for(int i = 1;i <= m; ++i) {
scanf("%s",s+1);
n = strlen(s+1);
binary_srch();
}
return 0;
}

[CTSC 2012]熟悉的文章的更多相关文章

  1. [CTSC2012]熟悉的文章(后缀自动机+动态规划)

    题目描述 阿米巴是小强的好朋友. 在小强眼中,阿米巴是一个作文成绩很高的文艺青年.为了获取考试作文的真谛,小强向阿米巴求教.阿米巴给小强展示了几篇作文,小强觉得这些文章怎么看怎么觉得熟悉,仿佛是某些范 ...

  2. 【[CTSC2012]熟悉的文章】

    题目 好题啊 \(SAM\)+单调队列优化\(dp\) 首先这个\(L\)满足单调性真是非常显然我们可以直接二分 二分之后套一个\(dp\)就好了 设\(dp[i]\)表示到达\(i\)位置熟悉的文章 ...

  3. P4022 [CTSC2012]熟悉的文章

    题目 P4022 [CTSC2012]熟悉的文章 题目大意:多个文本串,多个匹配串,我们求\(L\),\(L\)指(匹配串中\(≥L\)长度的子串出现在文本串才为"熟悉",使得匹配 ...

  4. [BZOJ2806][CTSC2012]熟悉的文章(Cheat)

    bzoj luogu 题目描述 阿米巴是小强的好朋友. 在小强眼中,阿米巴是一个作文成绩很高的文艺青年.为了获取考试作文的真谛,小强向阿米巴求教.阿米巴给小强展示了几篇作文,小强觉得这些文章怎么看怎么 ...

  5. mount不是很熟悉 转载文章了解下 转自http://forum.ubuntu.org.cn/viewtopic.php?f=120&t=257333

    纯粹针对刚刚解封开包的新新手,老鸟们请自觉绕行,否则浪费你的时间你非要逼我做谋杀犯可不光我的事你还没地方说理去.如果你正好是个崭新的新手,就耐心的花点时间看看吧,至少大概看看,不要在一个陌生又黑暗的到 ...

  6. [CTSC 2012][BZOJ 2806]Cheat

    真是一道好题喵~ 果然自动机什么的就是要和 dp 搞基才是王道有木有! A:连 CTSC 都叫我们搞基,果然身为一个程序猿,加入 FFF 团是我此生最明智的选择.妹子什么闪边去,大家一起来搞基吧! Q ...

  7. 题解-CTSC2012 熟悉的文章

    Problem bzoj 题目大意:给定多个标准串和一个文本串,全部为01串,如果一个串长度不少于\(L\)且是任意一个标准串的子串,那么它是"熟悉"的.对于文本串\(A\),把\ ...

  8. CTSC2012 熟悉的文章

    传送门 首先很容易想到对于所有的模式串建出广义后缀自动机,之后对于我们每一个要检查的文本串,先在SAM上跑,计算出来每一个位置能匹配到的最远的位置是多少.(就是当前点减去匹配长度) 之后--考虑DP- ...

  9. Luogu4022 CTSC2012 熟悉的文章 广义SAM、二分答案、单调队列

    传送门 先将所有模板串扔进广义SAM.发现作文的\(L0\)具有单调性,即\(L0\)更小不会影响答案,所以二分答案. 假设当前二分的值为\(mid\),将当前的作文放到广义SAM上匹配. 设对于第\ ...

随机推荐

  1. ConcurrenHashMap介绍1.8 中为什么要用红黑树

    java8不是用红黑树来管理hashmap,而是在hash值相同的情况下(且重复数量大于8),用红黑树来管理数据. 红黑树相当于排序数据.可以自动的使用二分法进行定位.性能较高. 在Concurren ...

  2. java idea 创建第一个java 程序

    我们在 src 目录下边创建一个 package. 然后在package下创建我们的程序  helloworld.java 代码: package com.api.com; public class ...

  3. 关于第一次web前端面试的记录

    最近参加了一场面试,感觉自己题目都懂,但是说起来就是有点说不明白,所以写个博客整理以下吧.答案不少不是面试时回答的答案,只是整理一下可行答案 1. 如图1,使B相对于A垂直居中 图1 <styl ...

  4. NX二次开发-读取图纸表格注释与部件属性关联的名字

    NX11+VS2013 #include <uf.h> #include <uf_ui.h> #include <uf_tabnot.h> #include < ...

  5. csp-s模拟测试92

    csp-s模拟测试92 关于$T1$:最短路这一定建边最短路. 关于$T2$:傻逼$Dp$这一定线段树优化$Dp$. 关于$T3$:最小生成树+树P+换跟一定是这样. 深入(?)思考$T1$:我是傻逼 ...

  6. (转)C++实现RTMP协议发送H.264编码及AAC编码的音视频,摄像头直播

    转:http://www.cnblogs.com/haibindev/archive/2011/12/29/2305712.html C++实现RTMP协议发送H.264编码及AAC编码的音视频 RT ...

  7. sqlserver 调优(三)

    用户数据库质疑状态处理(可能由于机房断电,数据库服务器异常重启后,导致个别数据库状态质疑): --修复数据库(置疑) -- xxxDB 为需要修复的数据库的名称 ALTER DATABASE xxxD ...

  8. java.lang.NoSuchMethodError: com.google.common.hash.HashFunction.hashInt(I)Lcom/google/common/hash/HashCode; 解决办法

    今天在java 上运行spark查询的时候出现一个问题: java.lang.NoSuchMethodError: com.google.common.hash.HashFunction.hashIn ...

  9. 第四天:语句、表达式与if分支、循环语句

    表达式 代码风格 代码格式指南 PEP8 缩进4空格 一行不超过79 空行 赋值语句 基本 (x,y) = (5,10) x [x,y,z] = [1,2,3] x a,b,c = 'uhk' a 5 ...

  10. ES6 学习 -- 字符串新增方法

    1.检测字符串中是否包含某个字符 ES5方法:string.indexOf("需要检测的字符"),如果返回值为-1,则说明当前字符串中不存在这个字符,返回值不为-1,则 是当前字符 ...