博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
hdu5716
阅读量:4984 次
发布时间:2019-06-12

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

地址:

题目:

带可选字符的多字符串匹配

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)

Total Submission(s): 763    Accepted Submission(s): 171

Problem Description
有一个文本串,它的长度为
m(1m2000000),现在想找出其中所有的符合特定模式的子串位置。
符合特定模式是指,该子串的长度为n(1n500),并且第i个字符需要在给定的字符集合Si中。
因此,描述这一特定模式,共需要S1,S2,...,Snn个字符集合。每个集合的大小都在162之间,其中的字符只为数字或大小写字母。
 

 

Input
第一行为一个字符串,表示待匹配的文本串。注意文本串中可能含有数字和大小写字母之外的字符。
第二行为一个整数
n
以下n行,分别描述n个字符集合。每行开始是一个162之间的整数,随后有一个空格,接下来有一个字符串表示对应字符集合的内容。整数表示字符集合的大小,因此它也就是字符串的长度。输入保证字符串中的字符只为数字或大小写字母且没有重复。<b>(注:本题有多组测试数据)</b>
 

 

Output
每当从某个位置开头的,长度为
n的子串符合输入的模式,就输出一行,其中包含一个整数,为它在文本串的起始位置。位置编号从1开始。
如果文本串没有任何位置符合输入模式,则最后输出一个字符串"NULL",占一行。
 

 

Sample Input
aaaabacabcabd 3 3 abc 2 bc 3 abc
 

 

Sample Output
4 6 8 9
 

 

Source
 

 思路:

  shiftand算法,不会的先百度吧。

  因为模式串比较长,所以bitset状压一下。

1 #include 
2 3 using namespace std; 4 5 #define MP make_pair 6 #define PB push_back 7 typedef long long LL; 8 typedef pair
PII; 9 const double eps=1e-8;10 const double pi=acos(-1.0);11 const int K=1e6+7;12 const int mod=1e9+7;13 14 int getidx(char c)15 {16 if('0'<=c&&c<='9') return c-'0';17 if('a'<=c&&c<='z') return c-'a'+11;18 if('A'<=c&&c<='Z') return c-'A'+37;19 return 63;20 }21 22 char sa[2000007],sb[300];23 bitset<500>bt[65],d;24 int n;25 int main(void)26 {27 //freopen("in.acm","r",stdin);28 while(gets(sa))29 {30 memset(bt,0,sizeof bt);31 scanf("%d",&n);32 for(int i=0,len;i

 

转载于:https://www.cnblogs.com/weeping/p/7608647.html

你可能感兴趣的文章
构建之法阅读笔记(一)
查看>>
帮助你设计的50个自由和新鲜的图标集
查看>>
Glusterfs[转]
查看>>
javascript缩写
查看>>
GA来源分析
查看>>
常用统计指标
查看>>
iOS设置圆角矩形和阴影效果
查看>>
在博客园的第一篇文章,先简单自述一下吧
查看>>
深入了解 Dojo 的服务器推送技术
查看>>
hdu 4284 状态压缩
查看>>
逆向分析技术
查看>>
Latex
查看>>
SpringMVC处理JSON
查看>>
几何建模
查看>>
java crm 系统 进销存 springmvc SSM项目项目源码
查看>>
jQuery.extend 函数详解
查看>>
<jQuery> 一. jQuery简介及优点
查看>>
架构相关概念——学习笔记
查看>>
被称为“开发者神器”的GitHub,到底该怎么用?
查看>>
(坑集)Django环境配置
查看>>