二分+单调队列优化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. docker Dcokerfile学习---构建nginx环境

    1.创建项目目录并上传包 $ mkdir docker_nginx $ cd docker_nginx 下载nginx包 $ wget http://nginx.org/download/nginx- ...

  2. Hadoop–Task 相关

    在MapReduce计算框架中,一个应用程序被划分为Map和Reduce两个计算阶段.他们分别由一个或多个Map Task 和Reduce Task组成. Map Task: 处理输入数据集合中的一片 ...

  3. Linux批量解压缩脚本

    #!/bin/bash # 批量解压缩脚本 # 作者: shaohsiung # 时间: // # Store all file names in the tmp directory with the ...

  4. leetcood学习笔记-171-excel表列序号

    题目描述: 方法: class Solution: def titleToNumber(self, s: str) -> int: num = 0 r = 1 for i in s[::-1]: ...

  5. 高危预警| SQL数据库成主要攻击对象,或引发新一轮大规模勒索

    近日,阿里云安全团队发现,目前互联网上的服务器,SQL数据库仍然有不少处于直接暴露在公网的状态,且数量有上升趋势.黑客可以利用数据库存在的漏洞或弱口令直接获取数据,并植入勒索和挖矿病毒寻求牟利.阿里云 ...

  6. thinkphp 数据缓存

    在ThinkPHP中进行缓存操作,一般情况下并不需要直接操作缓存类,因为系统内置对缓存操作进行了封装,直接采用S方法即可,例如: 缓存初始化 // 缓存初始化 S(array('type'=>' ...

  7. php的字符串{}选定与{变量}

    $str = "abcdefg"; echo $str{2};//输出c $a = "test"; echo "ddd{$a}";//输出d ...

  8. DELPHI读取网页源文件和获取字符串

    说到网页采集,通常大家以为到网上偷数据,然后把到收集到的数据挂到自己网上去.其实也可以将采集到的数据做为公司的参考,或把收集的数据跟自己公司的业务做对比等.目前网页采集多为3P代码为多(3P即ASP. ...

  9. delphi透明panel组件或者制作方法

    //透明Panel控件 unit TranPanel; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, ...

  10. 7.RabbitMQ RFC同步调用

    RabbitMQ RFC同步调用是使用了两个异步调用完成的,生产者调用消费者的同时,自己也作为消费者等待某一队列的返回消息,消费者接受到生产者的消息同时,也作为消息发送者发送一消息给生产者.参考下图: ...