二分+单调队列优化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. Eureka备忘

    一. 二. 2.2. eureka集群同步集群相关重要的类com.netflix.eureka.registry.PeerAwareInstanceRegistryImpl: 为了保证集群里所有Eur ...

  2. 关于使用AWS的centos

    AWS的centos在版本上有些许不同. 当使用6代的时候,默认的登录用户是root 使用7代的系统,默认的登录用户是centos 否则登录不上去

  3. day03 mysql外键 表的三种关系 单表查询 navicat

    day03 mysql navicat   一.完整性约束之     外键 foreign key     一个表(关联表: 是从表)设置了外键字段的值, 对应的是另一个表的一条记录(被关联表: 是主 ...

  4. Vultr账户充值需要注意的事项

    一.Vultr充值注意事项 1.选择适合自己的充值工具.我们可以使用支付宝.信用卡.PAYPAL等支付方式,需要我们注意的是充值方式不要来回切换充值,如果我们有多账户的时候一定不要相互使用,以免导致账 ...

  5. react 路由使用react-router-dom

    react 和vue一样都是使用封装history 来进行页面跳转,下面就来说一下react常用的路由插件react-router-dom这个东西在GitHub上 目前是最受欢迎的 首相还是先下载 n ...

  6. Jenkins 搭建 .NET Core 持续集成环境

    关于c#的.Net FrameWork 的集成环境以及MsBuild的配置可以看     jenkins搭建.NET FrameWork持续集成环境 这篇文章     关于.NET Core 这个项目 ...

  7. Linux service,挂载,定时任务等常用服务

    一.防火墙 防火墙根据配置文件/etc/sysconfig/iptables 来控制本机的“出.入”网络访问行为 其对行为的配置策略有四个策 1. 基础必备技能           查看防火墙状态 s ...

  8. awk 一 文本处理工具

    简介 awk 是逐行扫描文件(从第1行到最后一行),寻找含有目标文本的行: 如果匹配成功,则会在该行上执行用户想要的操作. 反之,则不对行做任何处理. awk 命令的基本格式为: awk [选项] ' ...

  9. BlockingQueu 阻塞队列

    java.util.concurrent public interface BlockingQueue<E> extends Queue<E> 简介 当阻塞队列插入数据时: 如 ...

  10. NX二次开发-UFUN圆弧矩阵标记、起始角和结束角(弧度测量)、圆弧中心坐标和圆弧半径UF_CURVE_ask_arc_data(边可以用)

    1 NX11+VS2013 2 3 #include <uf.h> 4 #include <uf_ui.h> 5 #include <uf_modl.h> 6 #i ...