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] ...
随机推荐
- POJ2456 Aggressive cows(二分+贪心)
如果C(d)为满足全部牛之间的距离都不小于d. 先对牛舍的位置排序,然后二分枚举d,寻找满足条件的d. #include<iostream> #include<cstdio> ...
- 部署全局ajax处理
$.ajaxSetup({ beforeSend:function(){ $('.loading').show(); }, complete:function(){ $('.loading').fad ...
- Unreal开发HTC Vive程序,开启VR编辑模式
新建项目模板有个VirtualReality 调试的时候,Play按钮下拉有个VR Preview 打开VR模式,在我现在用的4.15.0版本,VR编辑模式还是预览功能,可以在“编辑器偏好设置”-“试 ...
- [NOI2008] 志愿者招募[流量平衡]
288. [NOI2008] 志愿者招募 ★★★★ 输入文件:employee.in 输出文件:employee.out 简单对比时间限制:2 s 内存限制:512 MB [问题描述] ...
- ORA-01078错误解决办法
ORA-01078: failure in processing system parameters & LRM-00109: could not open parameter file 安装 ...
- 四 Android Studio打包EgretApp (热更新)
官网教程: http://developer.egret.com/cn/github/egret-docs/Native/native/hotUpdate/index.html 和Eclipse一样, ...
- Android软键盘的隐藏显示研究
http://winuxxan.blog.51cto.com/2779763/522810 全局推: android:windowSoftInputMode="adjustResize&qu ...
- 170404、java版ftp操作工具类
package com.rick.utils; import java.io.File; import java.io.FileInputStream; import java.io.FileNotF ...
- PHP array_merge() 函数
<?php $a1=array("a"=>"red","b"=>"green"); $a2=array ...
- Hibernate-sessio缓存的操作
首先咋们看一个图: flush:首先箭头是由缓存指向数据库,即当我调用 Session.flush()方法时它会强制使数据库的记录跟缓存 中的对象状态保持同步 ,如果不一致,就会发送Sql语句 ,保持 ...