http://poj.org/problem?id=1816

比较麻烦的trie。

首先你需要选择针对n还是m建立trie,这里我选择了针对n。

那么就需要面临卡空间的问题。

这里提供了一种链式前向星的方法能够当你不会指针trie的时候卡过空间。(做法看代码吧)

然后针对m进行在trie上的dfs即可。

对于相同字符或?来说,trie下移1位,匹配串移动1位。

对于*来说,trie下移,匹配串移动0~长度位。

(合计这道题就难在模拟上了)

#include<cstdio>
#include<algorithm>
#include<cstring>
#include<vector>
using namespace std;
const int maxn=;
char s[];
struct node{
char se;
int to;
int nxt;
vector<int>ed;
}edge[maxn];
int head[maxn],cnt=,cnt1=;
void add(int u,char c){
cnt++;cnt1++;
edge[cnt].se=c;
edge[cnt].to=cnt1;
edge[cnt].nxt=head[u];
head[u]=cnt;
return;
}
void insert(int k){
int u=;
int l=strlen(s);
for(int i=;i<l;i++){
int v=-;
char c=s[i];
for(int j=head[u];j;j=edge[j].nxt){
if(edge[j].se==c){
v=edge[j].to;
if(i==l-)edge[j].ed.push_back(k);
break;
}
}
if(v<){
add(u,c);
v=cnt1;
if(i==l-)edge[cnt].ed.push_back(k);
}
u=v;
}
return;
}
vector<int>ans;
int l;
void check(int u,int k,int p){
if(k==l){
if(!edge[p].ed.empty()){
for(int i=;i<edge[p].ed.size();i++){
ans.push_back(edge[p].ed[i]);
}
}
for(int j=head[u];j;j=edge[j].nxt){
int v=edge[j].to;
if(edge[j].se=='*'){
check(v,k,j);
}
}
return;
}
char c=s[k];
for(int j=head[u];j;j=edge[j].nxt){
int v=edge[j].to;
if(edge[j].se==c||edge[j].se=='?'){
check(v,k+,j);
}
if(edge[j].se=='*'){
for(int q=;q<=l-k;q++){
check(v,k+q,j);
}
}
}
return;
}
bool t[];
int main(){
int n,m;
scanf("%d%d",&n,&m);
for(int i=;i<n;i++){
scanf("%s",s);
insert(i);
}
for(int j=;j<m;j++){
scanf("%s",s);
ans.clear();
l=strlen(s);
check(,,);
if(ans.empty()){
printf("Not match");
}else{
memset(t,,sizeof(t));
sort(ans.begin(),ans.end());
for(int i=;i<ans.size();i++){
if(!t[ans[i]]){
printf("%d ",ans[i]);
t[ans[i]]=;
}
}
}
printf("\n");
}
return ;
}

POJ1816:Wild Words——题解的更多相关文章

  1. poj1816 Wild Words

    Wild Words Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 5567   Accepted: 1475 Descri ...

  2. Clash Credenz 2014 Wild Card Round题解

    A题 简单模拟. /************************************************************************* > File Name: ...

  3. Wild Words

    poj1816:http://poj.org/problem?id=1816 题意:给你n个模板串,然后每个串除了字母,还有?或者*,?可以代替任何非空单个字符,*可以替代任何长度任何串,包括空字符串 ...

  4. 2016 华南师大ACM校赛 SCNUCPC 非官方题解

    我要举报本次校赛出题人的消极出题!!! 官方题解请戳:http://3.scnuacm2015.sinaapp.com/?p=89(其实就是一堆代码没有题解) A. 树链剖分数据结构板题 题目大意:我 ...

  5. noip2016十连测题解

    以下代码为了阅读方便,省去以下头文件: #include <iostream> #include <stdio.h> #include <math.h> #incl ...

  6. BZOJ-2561-最小生成树 题解(最小割)

    2561: 最小生成树(题解) Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 1628  Solved: 786 传送门:http://www.lyd ...

  7. Codeforces Round #353 (Div. 2) ABCDE 题解 python

    Problems     # Name     A Infinite Sequence standard input/output 1 s, 256 MB    x3509 B Restoring P ...

  8. 哈尔滨理工大学ACM全国邀请赛(网络同步赛)题解

    题目链接 提交连接:http://acm-software.hrbust.edu.cn/problemset.php?page=5 1470-1482 只做出来四道比较水的题目,还需要加强中等题的训练 ...

  9. 2016ACM青岛区域赛题解

    A.Relic Discovery_hdu5982 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Jav ...

随机推荐

  1. Andorid自定义attr的各种坑

    本文来自网易云社区 作者:孙有军 在开发Andorid应用程序中,经常会自定义View来实现各种各样炫酷的效果,在实现这吊炸天效果的同时,我们往往会定义很多attr属性,这样就可以在XML中配置我们想 ...

  2. linux常用的命令之一chmod

    用权限 : 所有使用者 使用方式 : chmod [-cfvR] [--help] [--version] mode file... u 表示该档案的拥有者,g 表示与该档案的拥有者属于同一个群体(g ...

  3. 苏醒的巨人----CSRF

    一.CSRF 跨站请求伪造(Cross-Site Request Forgery,CSRF)是指利用 受害者尚未失效的身份认证信息(cookie.会话等),诱骗其点 击恶意链接或者访问包含攻击代码的页 ...

  4. Python函数变量和返回值

    Python函数的全局变量和局部变量 1.不同的编程语言,程序可以分为函数和过程两大类,函数具有具体返回值,而过程则不具有具体的返回值,python只具有函数,因为对于它的一般函数,其返回值为所具体返 ...

  5. hello word!------为什么开通博客以及自我介绍

    来北京已经一年半的日子了,已经完全成功熟练的成为了另一个我,没有了半年前刚来时的那种焦虑.急躁和格格不入. 回想起来那段时间,大概是我人生中非常重要的时期了,去年那个夏天,只身一人背上行囊踏上了北上的 ...

  6. bson文件的切分

    描述 最近遇到问题需要将较大的bson文件(MongoDB导出的二进制json文件)按文档(记录)进行切分,网上这方面的资料实在太少,弄了一天多终于达到了基本要求(还不知道有没有BUG) 代码 pac ...

  7. 【转】MMO即时战斗:技能实现

    转自 http://blog.csdn.net/cyblueboy83/article/details/41628743 一.前言 基本所有MMO游戏无论是回合制.策略类.即时战斗等等类型都需要有相应 ...

  8. SIFT特征原理与理解

    SIFT特征原理与理解 SIFT(Scale-invariant feature transform)尺度不变特征变换 SIFT是一种用来侦测和描述影像中局部性特征的算法,它在空间尺度中寻找极值点,并 ...

  9. 【转载】JAVA常见面试题及解答(精华)

     JAVA常见面试题及解答(精华)       1)transient和volatile是java关键字吗?(瞬联) 如果用transient声明一个实例变量,当对象存储时,它的值不需要维持.例如: ...

  10. 七:Web Application Proxy

    yarn自带了web接口,默认是和RM一起的(8088端口).但是为了减少从web接口受到的攻击,可以把Web接口单独放在别的机器上. 设置下web代理就行了 Configurations Confi ...