省队集训day6 B
一道AC自动机题····
一定要把一个节点没有的儿子接到它fai的儿子,否则会卡到n^2的·······
#include<cstdio>
#include<iostream>
#include<cstring>
#include<algorithm>
#include<ctime>
#define maxn 1048580
#define maxl 10005
using namespace std;
typedef long long int64;
char ch,s[maxl];
int fuckwmj=;
int n,l,head,tail,list[maxn];
int64 len;
struct Map{
int n,ans,ind[maxn],tot,now[maxn],son[maxn<<],pre[maxn<<],dep[maxn];
void init(int idx){
n=idx,ans=tot=;
memset(ind,,sizeof(ind));
memset(now,,sizeof(now));
memset(dep,,sizeof(dep));
}
void put(int a,int b){pre[++tot]=now[a],now[a]=tot,son[tot]=b,ind[b]++;}
void solve(){
head=,tail=;
for (int i=;i<=n;i++) if (!ind[i]) list[++tail]=i,dep[i]=;
while (head<tail){
int u=list[++head];
for (int p=now[u],v=son[p];p;p=pre[p],v=son[p]){
ind[v]--,dep[v]=max(dep[v],dep[u]+);
if (!ind[v]) list[++tail]=v;
}
}
for (int i=;i<=n;i++) if (ind[i]){puts("Yes");return;}
for (int i=;i<=n;i++) ans=max(ans,dep[i]);
if (ans>=len) puts("Yes");
else puts("No");
}
}dag;
struct trie{
int idx,son[maxn][],fai[maxn];
bool ok[maxn],bo[maxn];
void clear(){
idx=;
memset(son,,sizeof(son));
memset(fai,,sizeof(fai));
memset(ok,,sizeof(ok));
memset(bo,,sizeof(bo));
}
void insert(){
int p=;
for (int i=,op=(s[i]=='T');i<=l;p=son[p][op],i++,op=(s[i]=='T'))
if (!son[p][op]) son[p][op]=++idx;
ok[p]=;
}
void get_fai(){
head=,tail=,list[]=,fai[]=-,bo[]=;
while (head<tail){
int u=list[++head];
for (int ch=,v=son[u][ch],t;ch<=;v=son[u][++ch])
if (v&&!bo[v]){
bo[v]=,list[++tail]=v;
for (t=fai[u];t>=&&!son[t][ch];t=fai[t]);
if (t>=) fai[v]=son[t][ch]; else fai[v]=;
if (!son[v][]) son[v][]=son[fai[v]][];
if (!son[v][]) son[v][]=son[fai[v]][];
ok[v]=ok[v]|ok[u]|ok[fai[v]];
}
}
dag.init(idx);
head=,tail=,list[]=,bo[]=;
memset(bo,,sizeof(bo));
while (head<tail){
int u=list[++head];
for (int ch=,v=son[u][ch];ch<=;v=son[u][++ch])
if (v&&!ok[v]){
dag.put(u,v);
if (!bo[v]) bo[v]=,list[++tail]=v;
}
}
}
}T;
void get(){
for (ch=getchar();ch!='A'&&ch!='T';ch=getchar());
for (l=;ch=='A'||ch=='T';s[++l]=ch,ch=getchar());
}
int main(){
while (cin>>n>>len){
T.clear();
for (int i=;i<=n;i++) get(),T.insert();
T.get_fai(),dag.solve();
}
return ;
}
省队集训day6 B的更多相关文章
- 省队集训day6 C
Description 给定平面上的 N 个点, 其中有一些是红的, 其他是蓝的.现在让你找两条平行的直线, 使得在保证 不存在一个蓝色的点 被夹在两条平行线之间,不经过任何一个点, 不管是蓝色 ...
- 省队集训day6 A
code: #include<cstdio> #include<iostream> #include<cmath> #include<cstring> ...
- 省队集训 Day6 序列
[题目大意] 给出$n$个数的序列$a_1, a_2, ..., a_n$,有$m$次操作,为下面三种: $A~l~r~d$:区间$[l,r]$,全部加$d$. $M~l~r~d$:区间$[l,r]$ ...
- HN2018省队集训
HN2018省队集训 Day1 今天的题目来自于雅礼的高二学长\(dy0607\). 压缩包下载 密码: 27n7 流水账 震惊!穿着该校校服竟然在四大名校畅通无阻?霸主地位已定? \(7:10\)从 ...
- JS省队集训记
不知不觉省队集训已经结束,离noi也越来越近了呢 论考前实战训练的重要性,让我随便总结一下这几天的考试 Day 1 T1 唉,感觉跟xj测试很像啊?meet in middle,不过这种题不多测是什么 ...
- LOJ #6074. 「2017 山东一轮集训 Day6」子序列
#6074. 「2017 山东一轮集训 Day6」子序列 链接 分析: 首先设f[i][j]为到第i个点,结尾字符是j的方案数,这个j一定是从i往前走,第一个出现的j,因为这个j可以代替掉前面所有j. ...
- [2018HN省队集训D9T1] circle
[2018HN省队集训D9T1] circle 题意 给定一个 \(n\) 个点的竞赛图并在其中钦定了 \(k\) 个点, 数据保证删去钦定的 \(k\) 个点后这个图没有环. 问在不删去钦定的这 \ ...
- [2018HN省队集训D8T1] 杀毒软件
[2018HN省队集训D8T1] 杀毒软件 题意 给定一个 \(m\) 个01串的字典以及一个长度为 \(n\) 的 01? 序列. 对这个序列进行 \(q\) 次操作, 修改某个位置的字符情况以及查 ...
- [2018HN省队集训D8T3] 水果拼盘
[2018HN省队集训D8T3] 水果拼盘 题意 给定 \(n\) 个集合, 每个集合包含 \([1,m]\) 中的一些整数, 在这些集合中随机选取 \(k\) 个集合, 求这 \(k\) 个集合的并 ...
随机推荐
- 《程序设计中的组合数学》——polya计数
我们在高中的组合数学中常常会碰到有关涂色的问题,例如:用红蓝两种颜色给正方形的四个顶点涂色,会有几种不同的方案.在当时,我们下意识的认为,正方形的四个顶点是各不相同的,即正方形是固定的.而实际上我们知 ...
- zoj 2836 容斥原理
题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=2836 #include <cstdio> #incl ...
- cookie操作大全
JavaScript中的另一个机制:cookie,则可以达到真正全局变量的要求. cookie是浏览器 提供的一种机制,它将document 对象的cookie属性提供给JavaScript.可以由J ...
- Intellij 部署maven项目
一 部署Maven项目 1.下载和配置 (1)下载:maven.apache.org,点击download,下载apache-maven-3.3.9-bin.zip (2)配置环境变量: 环境变量包括 ...
- 面向GC的Java编程
转自http://hellojava.info/?p=341 HelloJava微信公众账号网站 面向GC的Java编程 Leave a reply 这是内部一个同事(沐剑)写的文章,国外有一家专门做 ...
- mysql 循环插入100w
use md5db; DROP PROCEDURE if exists myFunction; delimiter $$ CREATE PROCEDURE myFunction() BEGIN DEC ...
- 导入excel 数据到mysql出现的时间格式
昨天把一张表的数据导出做修改,然后用Navcat 导入,结果总是失败,也看不出问题,说时间格式不对,我看了excel里时间格式对的,之前是excel导出的,搞 了一两个小时,今天发现导入有个选项,我的 ...
- c#简单数组
int[,] a=new int[,]{{1,2},{3,4},{5,6}};//二维数组 textbox.text=a[0,1];//=2 int[][] b={new int[]{1,2},new ...
- raknet unity3d
Raknet是一高性能的跨平台的网络库. 他主要基于UDP实现,性能非常好,能够做server. 鉴于unity3d较差的网络支持. 本人成功实现了raknet c# for unity3d的使用,s ...
- 【分享】w32service table XPsp2
Ord Address fnAddr Symbols-------------------------------- [ 0] BF999280: BF93569A (win32k!Nt ...