POJ1816:Wild Words——题解
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——题解的更多相关文章
- poj1816 Wild Words
Wild Words Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 5567 Accepted: 1475 Descri ...
- Clash Credenz 2014 Wild Card Round题解
A题 简单模拟. /************************************************************************* > File Name: ...
- Wild Words
poj1816:http://poj.org/problem?id=1816 题意:给你n个模板串,然后每个串除了字母,还有?或者*,?可以代替任何非空单个字符,*可以替代任何长度任何串,包括空字符串 ...
- 2016 华南师大ACM校赛 SCNUCPC 非官方题解
我要举报本次校赛出题人的消极出题!!! 官方题解请戳:http://3.scnuacm2015.sinaapp.com/?p=89(其实就是一堆代码没有题解) A. 树链剖分数据结构板题 题目大意:我 ...
- noip2016十连测题解
以下代码为了阅读方便,省去以下头文件: #include <iostream> #include <stdio.h> #include <math.h> #incl ...
- BZOJ-2561-最小生成树 题解(最小割)
2561: 最小生成树(题解) Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 1628 Solved: 786 传送门:http://www.lyd ...
- Codeforces Round #353 (Div. 2) ABCDE 题解 python
Problems # Name A Infinite Sequence standard input/output 1 s, 256 MB x3509 B Restoring P ...
- 哈尔滨理工大学ACM全国邀请赛(网络同步赛)题解
题目链接 提交连接:http://acm-software.hrbust.edu.cn/problemset.php?page=5 1470-1482 只做出来四道比较水的题目,还需要加强中等题的训练 ...
- 2016ACM青岛区域赛题解
A.Relic Discovery_hdu5982 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Jav ...
随机推荐
- gitlab改root密码
1. ~$ sudo gitlab-rails console production 2.查询要改的用户 irb(main)::> u = User.where().first => #& ...
- AFD运维
1.afd 网址:https://www.dwd.de/AFD/html-en/contents.html 2.问题:拷贝了一个主机A配置后(HOST_CONFIG主机项),修改为另一个主机B配置:然 ...
- java 的原型模式和clone
原型模式是一种创建型设计模式,在java中可以直接调用object.clone(). 原型模式属于对象的创建模式.通过给出一个原型对象来指明所有创建的对象的类型,然后用复制这个原型对象的办法创建出更多 ...
- 「日常训练」 Yukari's Birthday(ZOJ-3665)
题意与分析 二分题.考虑到n的范围是\(10^{12}\),注意到等比公式\(S=a_1\frac{1-q^n}{1-q} (q\ne 1)\),可以看出,不论q有多大(1除外,这个时候\(r=1,k ...
- Appium(Python)API
1.创建新的会话desired_caps = desired_caps = { 'platformName': 'Android', 'platformVersion': '7.0', 'dev ...
- 【cookie接口】- jmeter - (请求提示no cookie)
1.虽然 请求成功 响应码 200 ,但是 返回code 1 ,表示接口不成功 2.加入 空的cookie 管理器就可以了 返回 code 0 注意:状态码 200 只是表示请求是成功的 , ...
- C复合文字
C99之前,可以传递数组,但是没有所谓的数组常量可供传递,于是新增了复合文字. 普通数组声明方法: int d[2]={10,20}; 复合文字声明: 与数组名相同,常量同时代表元素的地址. (int ...
- Faster RCNN论文解析
Faster R-CNN由一个推荐区域的全卷积网络和Fast R-CNN组成, Fast R-CNN使用推荐区域.整个网络的结构如下: 1.1 区域推荐网络 输入是一张图片(任意大小), 输出是目标推 ...
- truffle框架快速开发合约步骤
矩阵元区块链智能合约开发指南 1 适用范围 本规范描述了矩阵元区块链系统智能合约的开发约束与规范,用以指导DAPP开发者按照本规范开发基于矩阵元区块链运行的应用. 2 术语解释 术语 术语解释 DAP ...
- 【web前端开发】浏览器兼容性处理大全
1.居中问题 div里的内容,IE默认为居中,而FF默认为左对齐,可以尝试增加代码margin: 0 auto; 2.高度问题 两上下排列或嵌套的div,上面的div设置高度(height),如果di ...