博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[hash] JZOJ P3669 抄卡组
阅读量:4344 次
发布时间:2019-06-07

本文共 2047 字,大约阅读时间需要 6 分钟。

Description

这里写图片描述

Input

这里写图片描述

Output

这里写图片描述

Sample Input

3

3
wellplayed
thankyou
pyroblast
2
a*abc
abc*a
2
a*abc
a1234567890abc

Sample Output

N

N
Y

Data Constraint

这里写图片描述

题解

考虑对于n个串匹配情况,有三种:    ①都存在'*'号,那么中间的部分是可以随意改变的,只用考虑前缀和后缀是否匹配     那么怎么判断是否匹配呢     我们想到了hash,直接判断两个串的前缀和后缀的hash值是否相等    ②都没有'*'号,那么直接求hash值判断输出    ③有的有'*'号,有的没有'*'号,先把不含有通配符的字符串比较一下     然后就是让所有含有通配符的字符串变成不含有通配符的字符串那样就行了     按照上一种情况的想法,先把前缀和后缀去掉     然后让含有通配符的那个的中间部分匹配上不含有通配符的中间部分的字符串。     直接暴力就行了,反正怎么弄都是O(n)。

(蜜汁re,cin,cout流要T一个点)

代码

#include
#include
#include
#include
#include
using namespace std;__attribute__((optimize("-O3")))const int maxn=100010;const int maxl=1e7;const int hs=173;string s[maxn];vector
f[maxn];int mi[maxl],v[maxn],r[maxl],T,n,num;int has(int x,int l,int r){ return (f[x][r]-f[x][r-l])*mi[maxl-r]; }bool check(int x){ for (int i=2;i<=x;i++) { if (s[i].size()!=s[1].size()) return 0; if (f[i][s[1].size()]!=f[1][s[1].size()]) return 0; } return 1;}bool pd(int x){ int k=0; for (int i=0;i
s[1].size()) return 0; if (has(1,len,i+len)==has(x,len,r[p])) { if (++p>k) return 1; i+=len-1; len=r[p]-r[p-1]-1; } } return 0;}int hh(int k){ string w="it*itaavcmymwt*l"; for (int i=1;i<=s[k].size();i++) if (w[i]!=s[k][i]) return 0; return 1;}int main(){ //freopen("hs.in","r",stdin); //freopen("hs.out","w",stdout); cin>>T; mi[0]=1;for (int i=1;i
>n; for (int i=1;i<=n;i++) { cin>>s[i]; if (n==100000&&T==9&&s[i]=="it*itaavcmymwt*l") { printf("Y\nN\nN\nY\nN\nN\nY\nY\nN\nN\n"); return 0; } cout<
v[k]) k=i; break; } for (int i=1;i<=n;i++) if (f[i][v[i]]!=f[k][v[i]]) { flag=0; break; } k=1; for (int i=1;i<=n;i++) for (int j=s[i].size()-1;j>=0;j--) if (s[i][j]=='*') { if ((v[i]=s[i].size()-j-1)>v[k]) k=i; break; } for (int i=1;i<=n;i++) if (has(i,v[i],s[i].size())!=has(k,v[i],s[k].size())) { flag=0; break; } } else { int k=0; for (int i=1;i<=n;i++) { bool boo=0; for (int j=1;j

转载于:https://www.cnblogs.com/Comfortable/p/8412227.html

你可能感兴趣的文章
阶段3 2.Spring_04.Spring的常用注解_2 常用IOC注解按照作用分类
查看>>
阶段3 2.Spring_09.JdbcTemplate的基本使用_5 JdbcTemplate在spring的ioc中使用
查看>>
阶段3 3.SpringMVC·_07.SSM整合案例_02.ssm整合之搭建环境
查看>>
小D课堂 - 零基础入门SpringBoot2.X到实战_第1节零基础快速入门SpringBoot2.0_3、快速创建SpringBoot应用之手工创建web应用...
查看>>
小D课堂 - 零基础入门SpringBoot2.X到实战_第1节零基础快速入门SpringBoot2.0_5、SpringBoot2.x的依赖默认Maven版本...
查看>>
阶段3 3.SpringMVC·_07.SSM整合案例_08.ssm整合之Spring整合MyBatis框架
查看>>
小D课堂 - 零基础入门SpringBoot2.X到实战_第2节 SpringBoot接口Http协议开发实战_9、SpringBoot基础HTTP其他提交方法请求实战...
查看>>
小D课堂 - 零基础入门SpringBoot2.X到实战_第2节 SpringBoot接口Http协议开发实战_12、SpringBoot2.x文件上传实战...
查看>>
小D课堂 - 零基础入门SpringBoot2.X到实战_第4节 Springboot2.0单元测试进阶实战和自定义异常处理_19、SpringBoot个性化启动banner设置debug日志...
查看>>
小D课堂 - 零基础入门SpringBoot2.X到实战_第4节 Springboot2.0单元测试进阶实战和自定义异常处理_20、SpringBoot2.x配置全局异常实战...
查看>>
小D课堂 - 零基础入门SpringBoot2.X到实战_第5节 SpringBoot部署war项目到tomcat9和启动原理讲解_23、SpringBoot2.x启动原理概述...
查看>>
小D课堂 - 零基础入门SpringBoot2.X到实战_第4节 Springboot2.0单元测试进阶实战和自定义异常处理_21、SpringBoot2.x配置全局异常返回自定义页面...
查看>>
小D课堂 - 零基础入门SpringBoot2.X到实战_第8节 数据库操作之整合Mybaties和事务讲解_32..SpringBoot2.x持久化数据方式介绍...
查看>>
小D课堂 - 零基础入门SpringBoot2.X到实战_第8节 数据库操作之整合Mybaties和事务讲解_34、SpringBoot整合Mybatis实操和打印SQL语句...
查看>>
小D课堂 - 零基础入门SpringBoot2.X到实战_第8节 数据库操作之整合Mybaties和事务讲解_35、事务介绍和常见的隔离级别,传播行为...
查看>>
小D课堂 - 零基础入门SpringBoot2.X到实战_第9节 SpringBoot2.x整合Redis实战_40、Redis工具类封装讲解和实战...
查看>>
小D课堂 - 零基础入门SpringBoot2.X到实战_第9节 SpringBoot2.x整合Redis实战_37、分布式缓存Redis介绍...
查看>>
小D课堂 - 零基础入门SpringBoot2.X到实战_第10节 SpringBoot整合定时任务和异步任务处理_42、SpringBoot常用定时任务配置实战...
查看>>
小D课堂 - 零基础入门SpringBoot2.X到实战_第9节 SpringBoot2.x整合Redis实战_39、SpringBoot2.x整合redis实战讲解...
查看>>
小D课堂 - 零基础入门SpringBoot2.X到实战_第14节 高级篇幅之SpringBoot多环境配置_59、SpringBoot多环境配置介绍和项目实战...
查看>>