解题报告(6)——Word puzzles

2023-11-02 11:48
文章标签 报告 word 解题 puzzles

本文主要是介绍解题报告(6)——Word puzzles,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Word Puzzle

题目描述

给出一个字母地图和一些字符串,请你找出每个字符串的第一个字母在地图中的位置和该字符串的方向。
假设地图左上角为原点(0,0)。可能的方向有8个,从北开始顺时针方向依次编号A~H,北方编号为“A”。

               (方向)

输入格式

第一行包含三个正整数:L(0<L≤1000),C(0<C≤1000),W(0<W≤1000)。其中 L 表示地图的行数,C 表示地图的列数,W 表示字符串的数量。
接下来有 L 行、C 列,为字母地图。
接下来有 W 行,每行一个字符串。

输出格式

对于输入的每个单词串,你需要输出该字符串的第一个字母所在的行、列,以及字符串的方向。三个部分之间用一个空格间隔。
按输入的字符串顺序输出上述信息。

样例数据 1

输入 

20 20 10 
QWSPILAATIRAGRAMYKEI
 
AGTRCLQAXLPOIJLFVBUQ
 
TQTKAZXVMRWALEMAPKCW
 
LIEACNKAZXKPOTPIZCEO
 
FGKLSTCBTROPICALBLBC
 
JEW
HJEEWSMLPOEKORORA 
LUPQWRNJOAAGJKMUSJAE
 
KRQEIOLOAOQPRTVILCBZ
 
QOPUCAJSPPOUTMTSLPSF
 
LPOUYTRFGMMLKIUISXSW
 
WAHCPOIYTGAKLMNAHBVA
 
EIAKHPLBGSMCLOGNGJML
 
LDTIKENVCSWQAZUAOEAL
 
HOPLPGEJKMNUTIIORMNC
 
LOIUFTGSQACAXMOPBEIO
 
QOASDHOPEPNBUYUYOBXB
 
IONIAELOJHSWASMOUTRK
 
HPOIYTJPLNAQWDRIBITG
 
LPOINUYMRTEMPTMLMNBO
 
PAFCOPLHAVAIANALBPFS
 
MARGARITA
 
ALEMA
 
BARBECUE
 
TROPICAL
 
SUPREMA
 
LOUISIANA
 
CHEESEHAM
 
EUROPA
 
HAVAIANA
 
CAMPONESA

输出

0 15 G 
2 11 C
 
7 18 A
 
4 8 C
 
16 13 B
 
4 15 E
 
10 3 D
 
5 1 E
 
19 7 C
 
11 11 H

 

算法分析:

方法一:字典树+深搜 期望:无(数据给力就超时)

(1)建立字典树

(2)通过地图,向八个方向深搜

(3)获取各个方向和地址

 

Source:

无,时间复杂度过高,此处略过。

 

方法二:(多字符串匹配)——AC自动机 期望:100

(1)离线处理,将地图存储,并将每一个询问串跑trie;

(2)建立好trie后,建立AC自动机;

(3)从地图四条边位起点,分别向八个方向,跑匹配,若到达某结束点,记录位置;

 

注意:

1、万分小心,本题所用全部为大写字母,一定不能在建立过程中搞成小写,越界都可以跑出正确答案······

2、注意记录结束点时,要搞清楚自己是记录在询问上,还是AC自动机的节点上······空间要与之相匹配;

3、存储地址时,比较方便的时进行八个方向的打表,并且在之前记录结束接点时,就直接记录下该串长度,方便后面的地址的求取。

 

Source


#include
#include
#include
#include
#include
#includeusing namespace std;const int dx[9]={0,-1,-1, 0, 1, 1, 1, 0,-1};
const int dy[9]={0, 0, 1, 1, 1, 0,-1,-1,-1};
/*dx,dy:指向八个方向的表*/ 
int n,m,q,tot,cnt,head,tail;
/*tot:记录当前询问; cnt:记录当前的动态分配节点*/ 
char s[1010][1010];
/*s:字符分配地图*/
int f[1100000][27],first[1100000],lent[1100000];
/*f:AC自动机; first:记录是否为结束节点即编号; lent:和first对应,当前的长度*/ 
int fail[1100000],queue[11000000];
/*fail:AC自动机fail指针; queue:AC自动机的广搜队列*/
string ss;struct data /*离线:输出记录*/ 
{int x;int y;char dir;
}out[1010];void build(string &s) /*字典树的建立*/
{int position=0;for(int i=0;i>n>>m>>q;for(int i=0;i>s[i];}for(int i=1;i<=q;++i){cin>>ss;build(ss);}
}void build_AC(void)  /*构建AC自动机*/ 
{head=0;tail=1;queue[1]=0;while(head<tail)  /*广搜*/ {head++;for(int i=0;i<26 i="" fail="" if="" f="" queue="" head="" i="" if="" queue="" head="" fail="" f="" queue="" head="" i="" f="" fail="" queue="" head="" i="" tail="" queue="" tail="" f="" queue="" head="" i="" else="" f="" queue="" head="" i="" f="" fail="" queue="" head="" i="" void="" find="" int="" l="" int="" r="" int="" type="" int="" position="0;" while="" l="">=0&&l=0&&r<m) /*越界判断*/ {position=f[position][s[l][r]-'A'];l+=dx[type];   r+=dy[type];  /*保证方向不变,直线处理*/ if(first[position]&&out[first[position]].x<0)/*处理匹配上的字符串信息*/ {int v=first[position];out[v].x=l-lent[position]*dx[type];out[v].y=r-lent[position]*dy[type];out[v].dir=type+'A'-1;}}
}void get(void) /*跑AC匹配*/ 
{for(int k=1;k<=8;++k){for(int i=0;i<n;++i){find(i,0,k);find(i,m-1,k);}for(int i=0;i<m;++i){find(0,i,k);find(n-1,i,k);}}for(int i=1;i<=q;++i){cout<<out[i].x<<" "<<out[i].y<<" "<<out[i].dir<<'\n';}
}int main(void)
{ios::sync_with_stdio(false);cin.tie(NULL);  /*解绑*/ memset(out,-1,sizeof(out)); /*初始化*/read();build_AC();get();return 0;
}



Summary:

本题是一道AC自动机的模板题,是比较裸地AC自动机的多字符串匹配。然而因为自己一而再,再而三的出现很多奇奇葩葩的问题,导致这个题调了很久,AC自动机是基本上每个级别的考试都可能涉及的,是及其法之一,其作用主要在于字符串的处理,查询,匹配以及计数等问题,要牢记。


这篇关于解题报告(6)——Word puzzles的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/330397

相关文章

【专题】2024飞行汽车技术全景报告合集PDF分享(附原数据表)

原文链接: https://tecdat.cn/?p=37628 6月16日,小鹏汇天旅航者X2在北京大兴国际机场临空经济区完成首飞,这也是小鹏汇天的产品在京津冀地区进行的首次飞行。小鹏汇天方面还表示,公司准备量产,并计划今年四季度开启预售小鹏汇天分体式飞行汽车,探索分体式飞行汽车城际通勤。阅读原文,获取专题报告合集全文,解锁文末271份飞行汽车相关行业研究报告。 据悉,业内人士对飞行汽车行业

计算机毕业设计 大学志愿填报系统 Java+SpringBoot+Vue 前后端分离 文档报告 代码讲解 安装调试

🍊作者:计算机编程-吉哥 🍊简介:专业从事JavaWeb程序开发,微信小程序开发,定制化项目、 源码、代码讲解、文档撰写、ppt制作。做自己喜欢的事,生活就是快乐的。 🍊心愿:点赞 👍 收藏 ⭐评论 📝 🍅 文末获取源码联系 👇🏻 精彩专栏推荐订阅 👇🏻 不然下次找不到哟~Java毕业设计项目~热门选题推荐《1000套》 目录 1.技术选型 2.开发工具 3.功能

C - Word Ladder题解

C - Word Ladder 题解 解题思路: 先输入两个字符串S 和t 然后在S和T中寻找有多少个字符不同的个数(也就是需要变换多少次) 开始替换时: tips: 字符串下标以0开始 我们定义两个变量a和b,用于记录当前遍历到的字符 首先是判断:如果这时a已经==b了,那么就跳过,不用管; 如果a大于b的话:那么我们就让s中的第i项替换成b,接着就直接输出S就行了。 这样

Python:豆瓣电影商业数据分析-爬取全数据【附带爬虫豆瓣,数据处理过程,数据分析,可视化,以及完整PPT报告】

**爬取豆瓣电影信息,分析近年电影行业的发展情况** 本文是完整的数据分析展现,代码有完整版,包含豆瓣电影爬取的具体方式【附带爬虫豆瓣,数据处理过程,数据分析,可视化,以及完整PPT报告】   最近MBA在学习《商业数据分析》,大实训作业给了数据要进行数据分析,所以先拿豆瓣电影练练手,网络上爬取豆瓣电影TOP250较多,但对于豆瓣电影全数据的爬取教程很少,所以我自己做一版。 目

开题报告中的研究方法设计:AI能帮你做什么?

AIPaperGPT,论文写作神器~ https://www.aipapergpt.com/ 大家都准备开题报告了吗?研究方法部分是不是已经让你头疼到抓狂? 别急,这可是大多数人都会遇到的难题!尤其是研究方法设计这一块,选定性还是定量,怎么搞才能符合老师的要求? 每次到这儿,头脑一片空白。 好消息是,现在AI工具火得一塌糊涂,比如ChatGPT,居然能帮你在研究方法这块儿上出点主意。是不

解决Office Word不能切换中文输入

我们在使用WORD的时可能会经常碰到WORD中无法输入中文的情况。因为,虽然我们安装了搜狗输入法,但是到我们在WORD中使用搜狗的输入法的切换中英文的按键的时候会发现根本没有效果,无法将输入法切换成中文的。下面我就介绍一下如何在WORD中把搜狗输入法切换到中文。

【干货分享】基于SSM的体育场管理系统的开题报告(附源码下载地址)

中秋送好礼 中秋佳节将至,祝福大家中秋快乐,阖家幸福。本期免费分享毕业设计作品:《基于SSM的体育场管理系统》。 基于SSM的体育场管理系统的开题报告 一、课题背景与意义 随着全民健身理念的深入人心,体育场已成为广大师生和社区居民进行体育锻炼的重要场所。然而,传统的体育场管理方式存在诸多问题,如资源分配不均、预约流程繁琐、数据统计不准确等,严重影响了体育场的使用效率和用户体验。

Excel和Word日常使用记录:

Excel使用总结 表格颜色填充: 合并单元格: 选中你要合并的单元格区域。按下快捷键 Alt + H,然后松开这些键。再按下 M,接着按 C。这个组合键执行的操作是:Alt + H:打开“主页”选项卡。M:选择“合并单元格”选项。C:执行“合并并居中”操作。 插入行: 在Excel中,插入一行的快捷键是:Windows:选择整行(可以点击行号)。按下 Ctrl + Sh

word转PDF后mathtype公式乱码以及图片分辨率降低等一系列问题|完美解决

word转PDF后mathtype公式乱码以及图片分辨率降低等一系列问题|完美解决 问题描述 最近在投一篇期刊论文,直接提交word文档,当时没有查看提交预览,一审审稿意见全是:公式乱码、公式乱码、乱码啊!!!是我大意了,第二次提交,我就决定将word文档转成PDF后再提交,避免再次出现公式乱码的问题。接着问题又来了,我利用‘文件/导出’或‘文件/另存为’的方式将word转成PDF后,发现公式

【信创建设】信息系统信创建设整体技方案(word原件完整版)

信创,即“信息技术应用创新”。我国自主信息产业聚焦信息技术应用创新,旨在通过对IT硬件、软件等各个环节的重构,基于我国自有IT底层架构和标准,形成自有开放生态,从根本上解决本质安全问题,实现信息技术可掌控、可研究、可发展、可生产。信创发展是一项国家战略,也是当今形势下国家经济发展的新功能。信创产业发展已经成为各行各业数字化转型、提升产业链发展的关键。 软件全套资料部分文档清单: 工作安排任