POJ 1816 Wild Words

芯片级IO (Pad) Ring &IP Checklist 芯片级IO Ring,PAD Ring 和IP Checklist检查项目 阅读详情

/*

http://acm.pku.edu.cn/JudgeOnline/problem?id=1816
trie树下的DFS, 感觉非常好的一道题,能说明很多问题
*/

#include <iostream>
#include <algorithm>
#define MAX_M 100000
using namespace std;

//输入的pattern数以及待匹配的单词数
int pNum, strNum;
char temp[30];
//当前单词匹配的模式ID以及匹配的模式数
int  match[MAX_M + 1], matchNum = 0;

//类似于邻接表,当有两个模式串巷同时进行记录和匹配
struct pN
{
    //模式串的ID
    int id;
    //邻接模式串
    pN *next;
};
//用于对匹配的模式串ID进行排序
bool compare(int a, int b)
{
    if(a >= b)
        return true;
}
//得到当前字符c在trie树next表中的index下标
int getIndex(char c)
{
    int pos = 0;
    if(c == '?') pos = 26;
    else if(c == '*') pos = 27;
    else pos = c - 'a';
    return pos;
}
//trie树节点的定义
struct trieNode
{
    int id;
    //0-25表示a-z 26个小写字母,26表示'?',27表示'*'
    trieNode *next[28];
    pN *rep; //记录重复的pattern
    trieNode()
    {
        //初始化
        for(int i = 0; i < 28; i++)
            next[i] = NULL;
        id = 0;
        rep = NULL;
    }
};
//trie树的根
trieNode *root;
//向trie树中插入模式串pattern, id为id
void insert(char pattern[], int id)
{
    char c;
    int i, pos, len = strlen(pattern);
    if(!root) root = new trieNode();
    trieNode *curNode = root;
    for(i = 0; i < len; i++)
    {
        c = pattern[i];
        pos = getIndex(c);
        if(!curNode->next[pos])
            curNode->next[pos] = new trieNode();
        curNode = curNode->next[pos];
    }
    //记录ID,如果已经出现过此匹配串则需要添加邻接信息
    if(curNode->id == 0)
        curNode->id = id;
    else
    {
        pN *newPN = new pN();
        newPN->id = id;
        newPN->next = curNode->rep;
        curNode->rep = newPN;
    }
}

//待匹配单词为temp,当前匹配到的位置是pos,当前匹配到的结点是curNode
void trieDFS(char * const & temp, int pos, trieNode *curNode)
{
    //当整个单词扫描完,不能立即返回,因为单词后面还可以接*号
    if(pos >= strlen(temp))
    {
        //当前结点是一个有效的模式串
        if(curNode->id != 0)
        {
            //标记匹配信息
            match[matchNum++] = curNode->id;
            pN *rpn = curNode->rep;
            while(rpn)
            {
                match[matchNum++] = rpn->id;
                rpn = rpn->next;
            }
        }
    }
    //若当前单词还没有扫描完,则继续扫描
    if(pos < strlen(temp))
    {
        char c;
        c = temp[pos];
        //直接匹配当前字母
        int index = getIndex(c);
        if(curNode->next[index])
            trieDFS(temp, pos + 1, curNode->next[index]);
        //匹配?
        if(curNode->next[26])
            trieDFS(temp, pos + 1, curNode->next[26]);
    }
    //匹配*
    if(curNode->next[27])
    {
        int p;
        for(p = pos; p <= strlen(temp); p++)
            trieDFS(temp, p, curNode->next[27]);
    }
}
int main()
{
    int i, j;
    cin>>pNum>>strNum;
    for(i = 0; i < pNum; i++)
    {
        scanf("%s", temp);
        insert(temp, i + 1);
    }
    for(i = 0; i < strNum; i++)
    {
        cin>>temp;
        matchNum = 0;
        trieDFS(temp, 0, root);
        if(matchNum == 0)
            printf("Not match/n");
        else
        {
            sort(match, match + matchNum);
            for(j = 0; j < matchNum - 1; j++)
            {
                if(match[j] != match[j + 1])
                    printf("%d ", match[j] - 1);
            }
            printf("%d/n", match[matchNum  - 1] - 1);
        }
    }
    return 0;
}

基于STM32设计自动输液监测系统(241) 该系统集成了液位传感模块、光电传感器、电机模块、按键模块和OLED显示屏等多个功能模块,以实现全面的输液过程监控和控制。液位传感模块能够实时监测输液瓶中的液位,当液位到达限定值时,系统会自动控制步进电机夹紧输液管,并发出报警提醒,确保输液过程不会因液位过低而中断。 阅读详情

相关推荐

解决Visual C++2008安装失败,error 1935

重装系统后Visual C++没了,其他都能装上但VC2008会报这个error 1935。鉴于我把网上所有的解决方法排了一遍错,我也不知道是哪一步起效,所以就都放上来了。特别注意:报error 1935的错误原因可能不尽相同,比如我的报错开头为An error occurred,结尾为HRESULT:0x80070005。80070005 拒绝访问通常是权限问题,安装Visual C++无法写入文件夹或注册表(直接跳转第7步)

weixin_44427808的博客 1万+

poj字符串总结

1)poj1002 难度:1题意:给你一些字母与数字的对应关系,忽略‘-’,求是否有重复的号码,若有重复则输出重复次数(按字典序输出)。分析:先将所有字符串统一为数字串,然后字符串Qsort。2)poj1200   Crazy Search 难度:2题意: 找出不相同的子串数量,字母表大小和子串长度会给定.分析:将n长的字符串转为nc进制的数字(longint能够承受),并用bool数组标记。对于...

FanJin的博客 4852

人形机器人触觉革命:压电式电子皮肤的多模态感知与自修复技术突破

本文深入探讨了压电式电子皮肤如何推动人形机器人的触觉革命。文章分析了其基于压电效应的多模态感知原理,能够灵敏检测压力、振动与温度,并重点介绍了赋予电子皮肤自修复能力的动态共价网络等前沿材料技术,从而极大提升了机器人与物理世界进行精细、安全交互的可靠性与智能化水平。

weixin_29251567的博客 194

POJ - 1816 Wild Words(字典树变题)

Wild Words Time Limit: 2000MS   Memory Limit: 65536KB   64bit IO Format: %I64d & %I64u Submit Status Description A word is a string of lowercases. A word pattern is a s

luciozhang的博客 931

【数据攻略】字节面试真题(含答案)+100道面试题库

数据攻略

qq_40002713的博客 4102

从零构建AI Agent集群:Docker Compose与Nginx部署实战

在AI应用开发领域,微服务架构和容器化部署已成为提升开发效率和系统可维护性的关键技术。Docker Compose作为容器编排工具,能够将多个独立服务(如Node.js、Python应用)及其依赖(数据库、缓存)封装在隔离环境中,并通过统一配置文件定义服务间的网络与依赖关系,实现一键启停。Nginx作为反向代理,则提供了统一的网络入口、请求路由和负载均衡能力,是构建高可用Web应用的基石。这种组合技术方案的价值在于,它能将复杂的AI系统(如工作流引擎、对话Agent、技能库)的部署运维复杂度大幅降低,使得开

weixin_27028523的博客 638

POJ1816:Wild Words——题解

http://poj.org/problem?id=1816 比较麻烦的trie。 首先你需要选择针对n还是m建立trie,这里我选择了针对n。 那么就需要面临卡空间的问题。 这里提供了一种链式前向星的方法能够当你不会指针trie的时候卡过空间。(做法看代码吧) 然后针对m进行在trie上的dfs即可。 对于相同字符或?来说,trie下移1位,匹配串移动1位。 对于*来说,trie下...

weixin_33795806的博客 198

11、改进的加权轮询调度算法

本文详细介绍了对传统加权轮询(WRR)调度算法的改进方法,包括动态权重调整、优先级调度和预测机制,旨在提升系统的公平性、响应速度和适应性。通过设计与实现改进算法,并结合实验验证其在响应时间、资源利用率和公平性方面的显著提升,同时列举了该算法在数据中心、云服务平台、CDN及电商平台等实际场景中的应用案例。

day7的博客 190

poj 1816 Wild Words(字典树+DFS)

题目链接:poj 1816 Wild Words 题目大意:给定N个模板,即正则表达式,然后每次有一个询问串,输出能被哪些模板匹配。 解题思路:对模板建立字典树,然后每次询问即在字典树做DFS搜索,注意'*'的情况,可以匹配一个和多个,所以在结 尾的时候要注意。并且,模板串有重复的情况。 #include #include #include #include usin

不慌不忙、不急不躁 1178

实现航迹关联的三种JPDA算法及Matlab代码

本文介绍了三种不同的JPDA算法实现航迹关联,并提供相应的Matlab代码。卡尔曼滤波是一种常用的状态估计算法,其基本思想是根据系统模型和观测数据,通过迭代计算来更新系统状态的估计值。基于卡尔曼滤波的JPDA算法是指在航迹关联问题中,同时利用卡尔曼滤波器的状态估计和概率假设,从而确定目标之间的关联关系。基于粒子滤波的JPDA算法是指在航迹关联问题中,通过抽样生成一组粒子(代表系统的不同可能状态),从而计算目标之间的关联概率。基于启发式搜索的JPDA算法是指在航迹关联问题中,通过多次迭代寻找最优关联方案。

code_welike的博客 1831

DB文件在编程中的作用及示例代码

通过使用DB文件,我们可以实现数据的持久化存储,并能够高效地进行数据的增删改查操作。在本文中,我们以SQLite数据库为例,演示了如何使用Python语言创建和操作DB文件的示例代码。在实际的编程中,我们可以根据具体的需求和使用的数据库系统来进行更复杂的操作和优化。通过使用DB文件,我们可以实现数据的持久化存储,确保数据在程序关闭后也能被保留,并且能够高效地进行数据检索和更新。在本文中,我们将探讨DB文件的作用,并提供一些示例代码展示如何在编程中使用DB文件。上述代码中,我们使用SQLite提供的。

CodeSpark的博客 1821

POJ1816--Wild Words(Trie+搜索)

Description A word is a string of lowercases. A word pattern is a string of lowercases, '?'s and '*'s. In a pattern, a '?' matches any single lowercase, and a '*' matches none or more lowercases. 

SCUT_Pein 1488

SAP-ABAP:SAP系统调优利器:RZ11动态参数修改全指南

SAP系统调优利器:RZ11动态参数修改全指南

baidu_35680696的博客 970

poj1816 Wild words

Wild words 题目背景: poj1816 分析:虽然不想说,但是我不得不说,这个题刷新了我对“trie树很亲民”的认知,本题是trie + dfs因为存在通配符,就需要进行模糊匹配的处理,代码就有点繁琐了。具体的解题方向详见代码注释。 Source:   #include #include #include #include #include #include

scarlyw的博客 385

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

poj 1816-Wild Words

<br />#include<iostream> #include<cstdio> #include<string> #include<cstring> #include<algorithm> using namespace std; #define MAXN 28 typedef struct TrieNode{ bool yes; int num[1000]; int con; struct TrieNode *pre; struct

流水不争先 1万+

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

POJ1816(Wild Words)

Wild Words Description A word is a string of lowercases. A word pattern is a string of lowercases, '?'s and ‘'s. In a pattern, a ‘?’ matches any single lowercase, and a '’ matches none or more lowercases. There are many word patterns and some words in your

weixin_43808717的博客 277

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

poj 字符串相关之1816 Wild Words

poj 字符串相关之1816 Wild Words

ziqi9216的博客 358

POJ - 1816 Wild Words(字典树 + 搜索)

POJ - 1816 Wild Words(字典树 + 搜索) A word is a string of lowercases. A word pattern is a string of lowercases, '?'s and ‘'s. In a pattern, a ‘?’ matches any single lowercase, and a '’ matches none or mor...

weixin_43179892的博客 350

POJ1816 Wild Words Trie+Dfs

Problem Address:http://poj.org/problem?id=1816 【前言】 忽然看到文章说用指针占的空间比较大。 于是试了一下用int型的Trie。 感觉不用指针写的东西还是多了一点点。 【思路】 建树:

Human_CK的专栏 599

poj 1816 Wild Words (字符串_字典树)

题目链接:http://poj.org/problem?id=1816 题目大意:给定n个模式串,模式串中带有?和*,?可以当作任何一个字符,*可以当作随意个字符,也可以是0个。现在给出m个匹配串,问哪些模式串出现在当个匹配串中,按照这些模式串编号的字典序输出。   解题思路:用字典树+DFS求解.利用n个模式串建棵字典树,字典树节点保存next指针和当前所在的节

150

poj 1816 Wild Words

// 题意: 给出N(<=100000)个带通配符(?和*)的模式串, M(<=100)个字符串,// '*'可代替0个或多个字母,'?'可代替一个字母,问每个字符串能匹配到哪些模式串,按顺序给出 // 模式串长度不超过6, 要匹配的字符串长度不超过20.// 思路: 用trie树动态构建模式串,然后再dfs来匹配,// 要注意若静态建树会 MLE ,因为每个节点都含有vec...

weixin_30247159的博客 135

【POJ】1816 Wild Words

DFS+字典树。题目数据很BT。注意控制DFS深度小于等于len。当'\0'时,还需判断末尾*。另外,当遇到*时,注意讨论情况。 1 #include <iostream> 2 #include <cstdio> 3 #include <cstring> 4 #include <cstdlib> 5 #include...

weixin_33701617的博客 130

poj1816 Wild Words

Wild Words Time Limit:2000MS Memory Limit:65536K Total Submissions:5567 Accepted:1475 Description A word is a string of lowercases. A word pattern is a string ...

weixin_30437337的博客 123
上一篇: POJ 3283 Card Hands
下一篇: POJ 3468 A simple problems with Integers
bobten2008
博客等级 码龄18年 153粉丝 157原创
评论 4
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值