hdu5716
地址:
题目:
带可选字符的多字符串匹配
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)
Total Submission(s): 763 Accepted Submission(s): 171
符合特定模式是指,该子串的长度为n(1≤n≤500),并且第i个字符需要在给定的字符集合Si中。
因此,描述这一特定模式,共需要S1,S2,...,Sn这n个字符集合。每个集合的大小都在1∼62之间,其中的字符只为数字或大小写字母。
第二行为一个整数n。
以下n行,分别描述n个字符集合。每行开始是一个1∼62之间的整数,随后有一个空格,接下来有一个字符串表示对应字符集合的内容。整数表示字符集合的大小,因此它也就是字符串的长度。输入保证字符串中的字符只为数字或大小写字母且没有重复。<b>(注:本题有多组测试数据)</b>
如果文本串没有任何位置符合输入模式,则最后输出一个字符串"NULL",占一行。
3
3 abc
2 bc
3 abc
6
8
9
思路:
shiftand算法,不会的先百度吧。
因为模式串比较长,所以bitset状压一下。
#include <bits/stdc++.h> using namespace std; #define MP make_pair
#define PB push_back
typedef long long LL;
typedef pair<int,int> PII;
const double eps=1e-;
const double pi=acos(-1.0);
const int K=1e6+;
const int mod=1e9+; int getidx(char c)
{
if(''<=c&&c<='') return c-'';
if('a'<=c&&c<='z') return c-'a'+;
if('A'<=c&&c<='Z') return c-'A'+;
return ;
} char sa[],sb[];
bitset<>bt[],d;
int n;
int main(void)
{
//freopen("in.acm","r",stdin);
while(gets(sa))
{
memset(bt,,sizeof bt);
scanf("%d",&n);
for(int i=,len;i<n;i++)
{
scanf("%d%s",&len,sb);
for(int j=;j<len;j++) bt[getidx(sb[j])][i]=;
}
int len=strlen(sa),ff=;
d.reset();
for(int i=;i<len;i++)
{
d <<=;
d[]=;
d &= bt[getidx(sa[i])];
if(d[n-]) printf("%d\n",i-n+),ff=;
}
getchar();
if(!ff) printf("NULL\n");
}
return ;
}
hdu5716的更多相关文章
- HDU5716, HDU5745【dp+bitset】
DP+bitset HDU5716 dp[i][j] = dp[i-1][j-1] && (s[i] in set[j]); 第二维压bitset #include <bits ...
- HDU5716 : 带可选字符的多字符串匹配
shift-and算法,设$v[i][j]$表示文本串长度为$i$的前缀能否匹配模式串长度为$j$的前缀,$f[i][j]$表示字符$i$能否匹配模式串的第$j$个位置,那么有$v[i+1][j+1] ...
随机推荐
- hdu 2437(dfs)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2437 思路:只需用一个二维数组记录到达某点时路径长度mod k的最短路径长度,如果余数相同,就更新最小 ...
- angularjs1+nodejs搭建的个人博客 实战个人项目
项目地址:https://github.com/MrZwqShuai/Micro-agency-Demo
- shell脚本学习总结09--分支与循环结构
if 条件语句 = start ]];then echo start app elif [[ $ = stop ]];then echo stop appelif [[ $1 = ... ]];the ...
- iphone中点击input不能选中input中的内容
点击一个input,通过它的click事件选中这个input框中的内容,这个用jquery挺好实现的,但是有一个问题,在PC端和android手机上都可以让功能正常实现,在iphone上就没有效果了, ...
- ios 让两个tableView同时处于选中状态
- (void)tableView:(UITableView *)tableView didHighlightRowAtIndexPath:(NSIndexPath *)indexPath { [_l ...
- Java 字符串转成运算公式
GroovyShell 实现 public static void main(String args[]) { Binding binding = new Binding(); binding.set ...
- 170309、MySQL存储引擎MyISAM与InnoDB区别总结整理
1.MySQL默认存储引擎的变迁 在MySQL 5.1之前的版本中,默认的搜索引擎是MyISAM,从MySQL 5.5之后的版本中,默认的搜索引擎变更为InnoDB. 2.MyISAM与InnoDB存 ...
- Strut2流程分析-----从请求到Action方法()
手写请求会通过strutsPrepareAndExcuteFliter的doFilter()方法 然后会调用StrutsActionProxy类的excute()方法,生成一个代理类(ActionPr ...
- 20165330 2017-2018-2 《Java程序设计》第3周学习总结
课本知识总结 第四章 类与对象 类:包括类声明和类体 基本格式: class 类名 { 类体的内容 } 类声明: class+类名(注意:类名首字母需大写) 类体:类声明之后的一对"{&qu ...
- TestLink安装手册
环境准备 系统CentOS Linux release 7.3.1611 (Core) 搭建LAMP所需的集成包 xampp-linux-x64-7.2.0-0-installer.run 下载地址 ...