【GDOI2013模拟4】贴瓷砖
题目
A镇的主街是由N个小写字母构成,镇长准备在上面贴瓷砖,瓷砖一共有M种,第i种上面有Li个小写字母,瓷砖不能旋转也不能被分割开来,瓷砖只能贴在跟它身上的字母完全一样的地方,允许瓷砖重叠,并且同一种瓷砖的数量是无穷的。
问街道有多少字母(地方)不能被瓷砖覆盖。
分析
AC自动机模板题,
优化:用up[x]表示x沿fail链上的第一个有值的点,这样就省去循环了 。
线段覆盖求答案。
#include <cmath>
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <algorithm>
#include <queue>
const int maxlongint=2147483647;
const int mo=1000000007;
const int N=300001;
using namespace std;
struct ddx
{
int c[26],fail,deep,w,sum,up;
}trie[4008000];
char s[N],s1[N];
int n,m,tot,ans,sum[N],d[N*14];
void put()
{
int root=1;
for(int i=1;i<=strlen(s1+1);i++)
{
if(trie[root].c[s1[i]-'a'])
{
root=trie[root].c[s1[i]-'a'];
trie[root].sum++;
if(i==strlen(s1+1))
{
trie[root].w++;
}
}
else
{
trie[root].c[s1[i]-'a']=++tot;
trie[tot].sum++;
trie[tot].deep=trie[root].deep+1;
root=tot;
if(i==strlen(s1+1))
{
trie[tot].w++;
}
}
}
}
void makefail()
{
int head=0,tail=1,root=1;
d[1]=1;
trie[1].fail=0;
while(head<tail)
{
int k=d[++head],p=0;
for(int i=0;i<26;i++)
{
if(!trie[k].c[i]) continue;
p=trie[k].c[i];
int z=trie[k].fail;
while(z && !trie[z].c[i])
z=trie[z].fail;
trie[p].fail=trie[z].c[i];
d[++tail]=p;
trie[p].fail=trie[p].fail?trie[p].fail:1;
trie[p].up=p;
if(trie[p].up!=1 && !trie[trie[p].up].w) trie[p].up=trie[trie[p].fail].up;
}
}
}
int find()
{
int j=1;
for(int i=1;i<=n;i++)
{
int index=s[i]-'a';
while(j!=1 && !trie[j].c[index]) j=trie[j].fail;
j=trie[j].c[index];
j=j?j:1;
int p=j;
sum[i+1]--,sum[i-trie[trie[p].up].deep+1]++;
}
}
int main()
{
scanf("%d",&n);
scanf("%s",s+1);
scanf("%d",&m);
tot++;
for(int i=1;i<=m;i++)
{
scanf("%s",s1+1);
put();
}
makefail();
find();
int k=0;
for(int i=1;i<=n;i++)
{
k+=sum[i];
if(k)
ans++;
}
printf("%d",n-ans);
}
【GDOI2013模拟4】贴瓷砖的更多相关文章
- jzoj3156. 【GDOI2013模拟1】病毒传播
题意: 村庄里有m个人,初始有一些人感染了病毒.如果第i个人的编号i满足,有一对(a,b)(a是初始病毒感染者编号,b为前一天的感染者编号)使\(a*b mod m =i\),则第i个人会感染病毒.每 ...
- [JZOJ3168] 【GDOI2013模拟3】踢足球
题目 描述 题目大意 有两个队伍,每个队伍各nnn人. 接到球的某个人会再下一刻随机地传给自己人.敌人和射门,射门有概率会中. 每次射门之后球权在对方111号选手. 某个队伍到了RRR分,或者总时间到 ...
- [JZOJ3167] 【GDOI2013模拟3】查税
题目 描述 题目大意 维护一个有一次函数组成的序列 具体来说,对于位置xxx,现在的值为sx+zx∗(T−tx)s_x+z_x*(T-t_x)sx+zx∗(T−tx) 有两个操作,修改某个位置上 ...
- [JZOJ3171] 【GDOI2013模拟4】重心
题目 描述 题目大意 有一堆长为222的矩形,最下面的右端点横坐标为000. 每个矩形都有其固定的质量. 将这些矩形堆在一起,使得最右边的横坐标最大,并且满足它不会塌掉(满足物理学). 思考历程 首先 ...
- [JZOJ3177] 【GDOI2013模拟5】安全监控
题目 描述 (样例都懒得发出来了) 题目大意 给你一个有向图,从111号点出发,绕一圈回来.这一圈中必须经过222号点. 问经过的最少的点数(不重复). 思考历程 一看就觉得是一道神题. 然后仔细观察 ...
- [JZOJ3187]【GDOI2013模拟8】的士
题目 描述 题目大意 在一个数轴上,有些人要从某个点到达另一个点. 出租车从最左端出发,将所有人送到它们的目的地,最终到达最右边的点. 出租车只能做一个乘客,并且可以在图中将乘客丢下. 问最短时间. ...
- 不熟,不会,未a的题列表
不熟: jzoj5968. 电竞选手(不知道公式如何得来) jzoj4877. [NOIP2016提高A组集训第10场11.8]力场护盾 (对向量不熟悉,不知道为什么结果要取反) jzoj4867. ...
- App开发:模拟服务器数据接口 - MockApi
为了方便app开发过程中,不受服务器接口的限制,便于客户端功能的快速测试,可以在客户端实现一个模拟服务器数据接口的MockApi模块.本篇文章就尝试为使用gradle的android项目设计实现Moc ...
- 故障重现, JAVA进程内存不够时突然挂掉模拟
背景,服务器上的一个JAVA服务进程突然挂掉,查看产生了崩溃日志,如下: # Set larger code cache with -XX:ReservedCodeCacheSize= # This ...
随机推荐
- Redis 入门 3.2.2 命令
Redis 入门 3.2 字符串类型 3.2.2 命令 1. 获得符合规则的键名列表 SET key value GET key SET和GET是Redis中最简单的两个命令,他们实现的功能和编程 ...
- C语言博客作业05
这个作业属于哪个课程 C语言程序设计II 这个作业要求在那里 https://edu.cnblogs.com/campus/zswxy/CST2019-3/homework/9827 我在这个课程的目 ...
- spring boot-3.原理探究
新建的项目结构如下图: 1.POM 文件 项目会默认依赖 spring-boot-starter-parent 项目 <parent> <groupId>org.springf ...
- Active Directory Users and Computers 安装与使用(win7&win10)
一. ADUC安装 根据自己电脑所使用的Windows操作系统,找到对应的ADUC管理工具补丁包点击下载后安装. Windows7补丁下载链接:https://www.microsof ...
- mapper中通过resultMap自定义查询结果映射
mybatis中使用resultType做自动映射时,要注意字段名和pojo的属性名必须一致,若不一致,则需要给字段起别名,保证别名与属性名一致. 使用resultMap做自定义结果映射,字段名可以不 ...
- Vue.js官方文档学习笔记(三)创建Vue实例
创建Vue实例 每个 Vue 应用都是通过用 Vue 函数创建一个新的 Vue 实例开始的: var vm=new Vue({ //选项 }) Vue的设计受到了mvvm的启发 当创建一个 Vue 实 ...
- Python 的开始
现在的 Linux 上一般都自带有 Python 如果没有,那就下载一个 打开 python 在终端中输入 python ,如果出现了和这差不多的 Python 2.7.15+ (default, O ...
- 猎豹wifi的坑
最近想看看外面的风景,装了Cisco的VPN,但总是连不了外网,国内的网站连接速度比较慢. 运维人员看了很长时间都没发现原因,route print查看之后,说: 在连接外网之前,多走了层路由... ...
- JavaEE--JSP详解
一.JSP JSP全名为Java Server Pages,中文名叫java服务器页面,其根本是一个简化的Servlet设计,它是由Sun Microsystems公司倡导.许多公司参与一起建立的一种 ...
- yii报错yii\web\Request::cookieValidationKey must be configured with a secret key.
在config文件下main-local.php配置 'cookieValidationKey' => 'rabbit1234',