题意

给出 AAA 个长度为 NNN 的字符串,BBB 个长度为 MMM 的字符串,将长度为 NNN 的字符串竖直摆放,长度为 MMM 的字符串水平摆放,问能形成多少个 N∗MN*MN∗M 的矩阵。(2≤N,M≤4,1≤A∗B≤1008016)(2\leq N,M\leq 4,1\leq A*B\leq 1008016)(2≤N,M≤4,1≤A∗B≤1008016)

如下图所示,says,area,testsays,area,testsays,area,test 为长度为 MMM 的字符串,sat,are,yes,satsat,are,yes,satsat,are,yes,sat 为长度为 NNN 的字符串。


思路

比赛的时候觉得这题很好玩,因为题意有点绕,NNN 和 MMM 老是分不太清。

彻底搞清楚题意后,也没多少时间了,再加上这题过的人比较少,以为是道比较难的题,就没细想…(不过这类数独题第一反应的确应该是搜索…

赛后看了眼别人的代码,发现好暴力好简单…T^T

话不多说,做法就是维护长度为 NNN 的字符串的字典树,以及长度为 MMM 的字符串的字典树,枚举每一个格子填的字符,从左到右,从上到下依次进行暴力匹配,匹配成功则 ans=ans+1ans=ans+1ans=ans+1…

具体细节可以看看下面的代码,还是不太难理解的。

反思一下,如果早点看懂这道题,正确的思考方式如下:

  1. 类似数独,感觉是考察搜索
  2. 怎么搜呢?矩形也不大,要不直接枚举每个节点的字符算了,暴力一发试试水
  3. 怎么枚举呢?一次性枚举全部肯定是欠 T,要不按顺序从左到右,从上到下枚举试试
  4. 好像有点道理,那怎么判断当前对不对呢?
  5. emmmemmmemmm,涉及字符匹配的数据结构,我想想… KMP?KMP?KMP? 888 行
  6. 噢!字典树!妙啊,冲冲冲!
  7. 恭喜您获得了绿油油的 AcceptedAcceptedAccepted!

代码

#include <bits/stdc++.h>
#define rep(i,a,b) for(int i = a; i <= b; i++)
const int N = 1e6+10;
using namespace std;struct Trie{int tot, root, ch[N][30], pre[N];Trie() {root = tot = 0;}void insert(char *str){int cur = root;for(int i = 0; str[i]; i++){int x = str[i]-'a';if(ch[cur][x] == 0) ch[cur][x] = ++tot, pre[tot] = cur;cur = ch[cur][x];}}
}tre1, tre2;int n,m,a,b,ans,pos1[10],pos2[10];
char s[N];void dfs(int id){if(id == n * m - 1) {ans++; return;} id++; int row = id / m, col = id % m;rep(i,0,25){if(tre1.ch[pos1[col]][i] && tre2.ch[pos2[row]][i]){pos1[col] = tre1.ch[pos1[col]][i];pos2[row] = tre2.ch[pos2[row]][i];dfs(id);pos1[col] = tre1.pre[pos1[col]];pos2[row] = tre2.pre[pos2[row]];}}
}int main()
{scanf("%d%d",&n,&a);scanf("%d%d",&m,&b);rep(i,1,a) scanf("%s",s), tre1.insert(s);rep(i,1,b) scanf("%s",s), tre2.insert(s);dfs(-1);printf("%d\n", ans);return 0;
}

【2018 SWERC - C 】Crosswords【字典树、暴力搜索】相关推荐

  1. CodeForces - 979D Kuro and GCD and XOR and SUM(字典树+暴力+模拟)

    题目链接:点击查看 题目大意:说实话看到这么复杂而且还是英文的题面我是拒绝的,但题还是得补啊,就去百度找的题解看题意,题意大概是这样的: 给出n个操作,每个操作分为两种类型: 1 x:向集合中插入x ...

  2. leetcode 212. 单词搜索 II 字典树+深度优先搜索 java代码 详细解释

    给定一个二维网格 board 和一个字典中的单词列表 words,找出所有同时在二维网格和字典中出现的单词. 单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中"相邻"单元格 ...

  3. 分门别类刷leetcode——高级数据结构(字典树,前缀树,trie树,并查集,线段树)

    目录 Trie树(字典树.前缀树)的基础知识 字典树的节点表示 字典树构造的例子 字典树的前序遍历 获取字典树中全部单词 字典树的整体功能 字典树的插入操作 字典树的搜索操作 字典树的前缀查询 字典树 ...

  4. [Leetcode][第336题][JAVA][回文对][暴力][HashSet][字典树]

    [问题描述][困难] [解答思路] 1. 暴力(超时) 时间复杂度:O(n 2 ×m),其中 n 是字符串的数量,m 是字符串的平均长度 空间复杂度:O(1) class Solution {publ ...

  5. 2020.9.9华为笔试记忆:KMP+记忆化搜索+字典树

    2020.9.9华为笔试 当然,出现在我博客中的笔试都不是我自己的笔试(人家也不给我发笔试链接,小声bibi,诶,好像我也没投,hhhahahha 记者:为什么要做笔试? 我:生活无聊了喏,肯定要做啊 ...

  6. [leetcode 面试题 17.17] -- 多次搜索,KMP与字典树

    [leetcode 面试题 17.17] -- 多次搜索 题目来源 分析 KMP思路 完整代码 字典树 完整代码 题目来源 https://leetcode-cn.com/problems/multi ...

  7. CodeForces - 1285D Dr. Evil Underscores(记忆化搜索+字典树)

    题目链接:点击查看 题目大意:给出n个数字,现在要求出一个X,使得X与n个数字单独异或之后的最大值,输出这个最大值的最小值 题目分析:最大值的最小值,差点就以为是字典树+二分了,因为没有单调性然后就无 ...

  8. HDU-1671 Phone List 暴力版 + 字典树

    该题就是判定一个所给定串集中是否有某些串是另外一些串的前缀串的问题.字典树的话很好办只要判定在构建一个串的路径中是否已经有的节点被标记(此处有串结尾)和如果一个串在该处结尾,那么是否它的的孩子都为空. ...

  9. 【亡羊补牢】挑战数据结构与算法 第19期 LeetCode 212. 单词搜索 II(字典树,附上JS模板)

    仰望星空的人,不应该被嘲笑 题目描述 给定一个二维网格 board 和一个字典中的单词列表 words,找出所有同时在二维网格和字典中出现的单词. 单词必须按照字母顺序,通过相邻的单元格内的字母构成, ...

  10. newcoder 筱玛的迷阵探险(搜索 + 01字典树)题解

    题目描述 筱玛是个快乐的男孩子. 寒假终于到了,筱玛决定请他的朋友们一起来玩迷阵探险. 迷阵可以看做一个n×nn×n的矩阵A,每个格子上有一个有一个数Ai,j. 入口在左上角的(1,1)处,出口在右下 ...

最新文章

  1. Redis高可用之集群配置(六)
  2. C# C/S WPF 远程操作服务器上面的文件
  3. 如何活着:欲望、外界、标签、天才、时间、人生目标和经历
  4. go gin提交form表单请求
  5. python sftp模块_python下载paramiko模块准备使用SFTP的坑!!!
  6. python怎么赋值int_int对象不支持项赋值
  7. JavaEE——Spring4--(9)Spring的事务管理(注解方式)
  8. (转)ASP.NET MVC 3.0:基于Ajax的表单提交,A页面认证失败后页面被强转至登录页面,待登录成功将如何回到A页面?...
  9. 黑马程序员——C语言基础教程笔记
  10. 堆排序时间复杂度的计算过程
  11. php城市 省份,怎么获取省份和城市?
  12. IT大公司面试流程与总结
  13. Newton-Raphson算法
  14. linux基础之系统安装
  15. oracle导出dmp文件教程
  16. Linux下使用游戏手柄
  17. 【C#上位机】chart动态更新数据
  18. linux网络与防火墙
  19. 逻辑回归模型——股票客户流失预警模型
  20. 3441. 唐纳德与子串 (Easy)

热门文章

  1. 2022 SpringBoot的房屋租赁平台 房屋展示平台 留学生房屋租赁平台
  2. 基于SpringCloud Alibaba实现的论坛
  3. Hibernate常用配置
  4. 登录,注册,个人信息,退出的隐藏和出现
  5. linux清理磁盘空间_Ubuntu上释放磁盘空间的几种简单方法
  6. python怎么编程hello world用geany_第一个Hello World 程序
  7. fpt指的是什么_ftp是指的什么?
  8. 最小倍约数c语言,求助C语言求最大公约数和最小公倍数
  9. python中间件有哪些_python_21(Django中间件)
  10. 【POJ3608】Bridge Across Islands(旋转卡壳求两凸多边形的最短间距)