bzoj2806 [Ctsc2012]Cheat
我们的目的就是找到一个最大的L0,使得该串的90%可以被分成若干长度>L0的字典串中的子串。
明显可以二分答案,对于二分的每个mid
我们考虑dp:f[i]表示前i个字符,最多能匹配上多少个字符。
发现转移端点是个不断前进的区间,单调队列优化就可以了。
- #include <cstdio>
- #include <cstring>
- #include <iostream>
- #include <algorithm>
- #include <cmath>
- #define N 2222222
- #define eps 1e-8
- using namespace std;
- int last,tot,ch[N][],par[N],mx[N];
- void add(int c){
- int p=last,np=++tot;mx[np]=mx[p]+;
- for(;p&&!ch[p][c];p=par[p])ch[p][c]=np;
- if(!p)par[np]=;
- else{
- int q=ch[p][c];
- if(mx[q]==mx[p]+)par[np]=q;
- else{
- int nq=++tot;
- mx[nq]=mx[p]+;
- par[nq]=par[q];
- memcpy(ch[nq],ch[q],sizeof ch[nq]);
- par[q]=par[np]=nq;
- for(;p&&ch[p][c]==q;p=par[p])ch[p][c]=nq;
- }
- }last=np;
- }
- char s[N];
- int n,m,len;
- int pp[N],f[N];
- void dfs(int v,int x,int l){
- int t=s[x+]-'';pp[x]=l;
- if(x==len)return ;
- if(ch[v][t])dfs(ch[v][t],x+,l+);
- else{
- while(!ch[v][t])v=par[v],l=min(l,mx[v]);
- dfs(ch[v][t],x+,l+);
- }
- }
- int head,tail,q[N];
- bool check(int x){
- head=;tail=;
- for(int i=;i<=len;i++){
- f[i]=f[i-];
- while(head<=tail&&q[head]<i-pp[i])head++;
- if(head<=tail)f[i]=max(f[i],f[q[head]]+(i-q[head]));
- if(i+-x>=){
- int t=i+-x;
- while(head<=tail&&f[t]-t>=f[q[tail]]-q[tail])tail--;
- q[++tail]=t;
- }
- }
- double ans=f[len],tot=len;
- return ans>=(tot*0.9-eps);
- }
- int main(){
- mx[]=-;
- for(int i=;i<;i++)ch[][i]=;
- last=++tot;
- scanf("%d%d",&n,&m);
- while(m--){
- scanf("%s",s);len=strlen(s);
- last=;for(int j=;j<len;j++)add(s[j]-'');
- }
- while(n--){
- scanf("%s",s+);
- len=strlen(s+);
- dfs(,,);
- int l=,r=len,mid,ans=;
- while(l<=r){
- mid=(l+r)>>;
- if(check(mid)){ans=mid;l=mid+;}
- else r=mid-;
- }
- printf("%d\n",ans);
- }
- return ;
- }
bzoj2806 [Ctsc2012]Cheat的更多相关文章
- [bzoj2806][Ctsc2012]Cheat(后缀自动机(SAM)+二分答案+单调队列优化dp)
偷懒直接把bzoj的网页内容ctrlcv过来了 2806: [Ctsc2012]Cheat Time Limit: 20 Sec Memory Limit: 256 MBSubmit: 1943 ...
- bzoj2806: [Ctsc2012]Cheat(SAM+DP)
2806: [Ctsc2012]Cheat 题目:传送门 题解: 感觉这题考的更多的就是DP啊... 看完题目的第一反应就是广义SAM...(然而并不会) 再YY一会儿想起来可以直接将作文库连成一个母 ...
- BZOJ2806:[CTSC2012]Cheat(广义SAM,二分,DP)
Description Input 第一行两个整数N,M表示待检查的作文数量,和小强的标准作文库的行数 接下来M行的01串,表示标准作文库 接下来N行的01串,表示N篇作文 Output N行,每行一 ...
- BZOJ2806 [Ctsc2012]Cheat 【后缀自动机 + 二分 + 单调队列优化DP】
题目 输入格式 第一行两个整数N,M表示待检查的作文数量,和小强的标准作文库 的行数 接下来M行的01串,表示标准作文库 接下来N行的01串,表示N篇作文 输出格式 N行,每行一个整数,表示这篇作文的 ...
- BZOJ2806: [Ctsc2012]Cheat(广义后缀自动机,单调队列优化Dp)
Description Input 第一行两个整数N,M表示待检查的作文数量,和小强的标准作文库的行数接下来M行的01串,表示标准作文库接下来N行的01串,表示N篇作文 Output N行,每行一个整 ...
- 【BZOJ2806】[Ctsc2012]Cheat 广义后缀自动机+二分+单调队列优化DP
[BZOJ2806][Ctsc2012]Cheat Description Input 第一行两个整数N,M表示待检查的作文数量,和小强的标准作文库的行数接下来M行的01串,表示标准作文库接下来N行的 ...
- bzoj 2806: [Ctsc2012]Cheat 后缀自动机DP
2806: [Ctsc2012]Cheat Time Limit: 20 Sec Memory Limit: 256 MBSubmit: 583 Solved: 330[Submit][Statu ...
- BZOJ 2806: [Ctsc2012]Cheat [广义后缀自动机 单调队列优化DP 二分]
2806: [Ctsc2012]Cheat 题意: 多个主串和多个询问串,每次询问将询问串分成多个连续子串,如果一个子串长度>=L且在主串中出现过就是熟悉的 如果熟悉的字符串长度>=询问串 ...
- 【BZOJ2806】Cheat(后缀自动机,二分答案,动态规划,单调队列)
[BZOJ2806]Cheat(后缀自动机,二分答案,动态规划,单调队列) 题面 BZOJ 洛谷 题解 很有趣的一道题啊 对于在所有的串上面进行匹配? 很明显的后缀自动机 所以先构建出广义后缀自动机 ...
随机推荐
- javascript简单介绍(二)
晨读单词: onmouseover:鼠标移入 onmouseout:鼠标移出 attribute:属性 node:节点 document:文档 element:元素 textNode:文本节点 app ...
- 利用Tess4J实现图片识别
一.下载 1.进入官网下载页面 https://sourceforge.net/projects/tess4j/ 2.点击download 3.下载后解压,目录如下,圈出的三个文件夹是需要用到的 二. ...
- 一些Gym三星单刷的比赛总结
RDC 2013, Samara SAU ACM ICPC Quarterfinal Qualification Contest G 思路卡成智障呀! Round 1:对着这个魔法阵找了半天规律,效果 ...
- Coursera-AndrewNg(吴恩达)机器学习笔记——第一周
一.初识机器学习 何为机器学习?A computer program is said to learn from experience E with respect to some task T an ...
- 从数据库读取数据并动态生成easyui tree构结
一. 数据库表结构 二.从后台读取数据库生成easyui tree结构的树 1.TreeNode树结点类(每个结点都包含easyui tree 的基本属性信息) import java.io.Seri ...
- RabbitMQ 安装 Your installed version of Erlang (6.2) is too old. Please install a more recent version.
windows安装RabbitMQ时在安装完Erlang语言开发包后,再安装RabbitMQ时报错: Your installed version of Erlang (6.2) is too old ...
- rsync 密钥文件错误问题总结
rsync 可以使用 --password-file 选项指定密钥文件,密钥文件中简单存放 rsync 密码:在第一次使用密钥文件的时候经常遇到文件权限相关问题:这里总结一下,我遇到的问题. 问题描述 ...
- Python_NAT
sockMiddle_server.py import sys import socket import threading #回复消息,原样返回 def replyMessage(conn): wh ...
- Thymeleaf中each标签遍历list如何获取index
<tr th:each="user,userStat:${users}">userStat是状态变量,有 index,count,size,current,even,o ...
- PAT1042:Shuffling Machine
1042. Shuffling Machine (20) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Yue Shu ...