[CTSC 2012]熟悉的文章
二分+单调队列优化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]熟悉的文章的更多相关文章
- [CTSC2012]熟悉的文章(后缀自动机+动态规划)
题目描述 阿米巴是小强的好朋友. 在小强眼中,阿米巴是一个作文成绩很高的文艺青年.为了获取考试作文的真谛,小强向阿米巴求教.阿米巴给小强展示了几篇作文,小强觉得这些文章怎么看怎么觉得熟悉,仿佛是某些范 ...
- 【[CTSC2012]熟悉的文章】
题目 好题啊 \(SAM\)+单调队列优化\(dp\) 首先这个\(L\)满足单调性真是非常显然我们可以直接二分 二分之后套一个\(dp\)就好了 设\(dp[i]\)表示到达\(i\)位置熟悉的文章 ...
- P4022 [CTSC2012]熟悉的文章
题目 P4022 [CTSC2012]熟悉的文章 题目大意:多个文本串,多个匹配串,我们求\(L\),\(L\)指(匹配串中\(≥L\)长度的子串出现在文本串才为"熟悉",使得匹配 ...
- [BZOJ2806][CTSC2012]熟悉的文章(Cheat)
bzoj luogu 题目描述 阿米巴是小强的好朋友. 在小强眼中,阿米巴是一个作文成绩很高的文艺青年.为了获取考试作文的真谛,小强向阿米巴求教.阿米巴给小强展示了几篇作文,小强觉得这些文章怎么看怎么 ...
- mount不是很熟悉 转载文章了解下 转自http://forum.ubuntu.org.cn/viewtopic.php?f=120&t=257333
纯粹针对刚刚解封开包的新新手,老鸟们请自觉绕行,否则浪费你的时间你非要逼我做谋杀犯可不光我的事你还没地方说理去.如果你正好是个崭新的新手,就耐心的花点时间看看吧,至少大概看看,不要在一个陌生又黑暗的到 ...
- [CTSC 2012][BZOJ 2806]Cheat
真是一道好题喵~ 果然自动机什么的就是要和 dp 搞基才是王道有木有! A:连 CTSC 都叫我们搞基,果然身为一个程序猿,加入 FFF 团是我此生最明智的选择.妹子什么闪边去,大家一起来搞基吧! Q ...
- 题解-CTSC2012 熟悉的文章
Problem bzoj 题目大意:给定多个标准串和一个文本串,全部为01串,如果一个串长度不少于\(L\)且是任意一个标准串的子串,那么它是"熟悉"的.对于文本串\(A\),把\ ...
- CTSC2012 熟悉的文章
传送门 首先很容易想到对于所有的模式串建出广义后缀自动机,之后对于我们每一个要检查的文本串,先在SAM上跑,计算出来每一个位置能匹配到的最远的位置是多少.(就是当前点减去匹配长度) 之后--考虑DP- ...
- Luogu4022 CTSC2012 熟悉的文章 广义SAM、二分答案、单调队列
传送门 先将所有模板串扔进广义SAM.发现作文的\(L0\)具有单调性,即\(L0\)更小不会影响答案,所以二分答案. 假设当前二分的值为\(mid\),将当前的作文放到广义SAM上匹配. 设对于第\ ...
随机推荐
- 【第二次个人作业】结对作业Core第一组:四则运算生成PB16061082+PB16120517
[整体概况] 1.描述最终的代码的实现思路以及关键代码. 2.结对作业两个人配合的过程和两个人分工. 3.API接口文档和两个组的对接. 4.效能分析,优化分析和心得体会. [代码实现] 一. 实现功 ...
- Apache 环境变量配置
在path 中加入 C:\__S_D_K__\AndroidApache\apache-ant-1.9.14\bin 我的路径在C盘
- 《DNS攻击防范科普系列3》 -如何保障 DNS 操作安全
引言 前两讲我们介绍了 DNS 相关的攻击类型,以及针对 DDoS 攻击的防范措施.这些都是更底层的知识,有同学就来问能否讲讲和我们的日常操作相关的知识点,今天我们就来说说和我们日常 DNS 操作相关 ...
- js自动下载
常用方法是利用a标签的属性download下载对应文件.图片等 <a href=".." download="...."></a> 但是 ...
- js Date.parse() format.
date format android chrome linux chrome Mobile safari ios chrome windows safari linux firefox window ...
- 【开篇】基于C#+EmguCV的机器视觉平台开发
市面上关于通用的机器视觉平台已有不少,一些大的视觉产品.设备制造商都有开发自己的一套系统.其通用性也都有一些行业局限,难以囊括所有可能性,一些需要经过二次开发,这也是难以攻克的问题.本人水平有限,再加 ...
- bash字符串前导美元符号的作用
problem bash内置变量IFS作为内部单词分隔符,其默认值为<space><tab><newline>, 我想设置它仅为\n,于是: OLD_IFS=$IF ...
- CodeForces 1166D Cute Sequences
题目链接:http://codeforces.com/problemset/problem/1166/D 题目大意 给定序列的第一个元素 a 和最后一个元素 b 还有一个限制 m,请构造一个序列,序列 ...
- 自动化测试工具2-testcomplete
今天来说说testcomplete的使用 录了一个简单案例视频,网址如下:https://v.qq.com/x/page/f05116a062y.html 第一步是创建一个工程: 输入工程名,和选择工 ...
- 活动:新春第一次送书,价值78元 X 3本
新春第一次送书活动,送出3本重量级书籍<深入分布式缓存:从原理到实践>. 作者介绍: 于君泽:蚂蚁金服高级技术专家.花名右军,IT从业超过十五年.对高并发.分布式架构.内建质量.研发管理有 ...