【POJ1204】Word Puzzles【Trie】【暴力】
来源:互联网 发布:java培训公司有哪些 编辑:程序博客网 时间:2024/05/29 08:51
比较神奇的trie树。
当然不用对地图建8个trie,直接对单词建树即可。
枚举地图上的每个点和每个方向,深搜,在地图上边走、trie上边跑,如果找到单词结尾,那么就保存答案。
由于trie根节点并没有保存单词,所以深搜开始的节点是trie的儿子。
题目并没有告诉单词长度,一开始开了和地图一样的大小,结果MLE,最后开小了一个数量级,AC。
#include <cstdio>#include <cstring>#include <iostream>using namespace std;const int maxn = 1005, maxd = 26, maxnode = 100000;int n, m, k, sx, sy, delta[][2] = {{-1, 0}, {-1, 1}, {0, 1}, {1, 1}, {1, 0}, {1, -1}, {0, -1}, {-1, -1}};string g[maxn];struct _data {int x, y, d;} ans[maxn];struct _trie {int son[maxnode][maxd], triecnt, id[maxnode];void init() {memset(son, 0, sizeof(son)); triecnt = 1; memset(id, 0, sizeof(id));}void insert(string s, int w) {int now = 1, len = s.size();for(int i = 0; i < len; i++) {int ind = s[i] - 'A';if(!son[now][ind]) son[now][ind] = ++triecnt;now = son[now][ind];}id[now] = w;}void dfs(int now, int x, int y, int d) {if(!now) return;if(id[now]) {ans[id[now]] = (_data) {sx, sy, d};id[now] = 0;}x += delta[d][0]; y += delta[d][1];if(x < 0 || x >= n || y < 0 || y >= m) return;dfs(son[now][g[x][y] - 'A'], x, y, d);}} trie;int main() {ios::sync_with_stdio(false);cin >> n >> m >> k;for(int i = 0; i < n; i++) cin >> g[i];trie.init();for(int i = 1; i <= k; i++) {string str; cin >> str;trie.insert(str, i);}for(int i = 0; i < n; i++) for(int j = 0; j < m; j++) for(int d = 0; d < 8; d++) trie.dfs(trie.son[1][g[i][j] - 'A'], sx = i, sy = j, d);for(int i = 1; i <= k; i++) printf("%d %d %c\n", ans[i].x, ans[i].y, ans[i].d + 'A');return 0;}
0 0
- 【POJ1204】Word Puzzles【Trie】【暴力】
- trie学习 poj1204 Word Puzzles
- POJ1204 Word Puzzles
- poj1204 Word Puzzles
- POJ1204-Word Puzzles
- poj1204——Word Puzzles
- POJ1204 Word Puzzles AC自动机
- 【字典树】 poj1204 Word Puzzles
- POJ1204--Word Puzzles--AC自动机
- POJ1204 - Word Puzzles - 字典树
- 【POJ1204】Word Puzzles-AC自动机
- 【POJ1204】Word Puzzles——AC自动机
- pku1204 Word Puzzles (Trie)
- Word Puzzles PKU1204 trie
- Word Puzzles - POJ 1204 Trie树
- POJ 1204 Word Puzzles [ Trie树 模板题]
- [POJ 1204]Word Puzzles(Trie树暴搜&AC自动机)
- Word Puzzles
- 【WAMP】解决升级WIN10后 WAMPServer不能使用的问题
- 使用 Capistrano 部署总结
- 行链接和行迁移的秘密
- 提高matlab运行效率
- Battery
- 【POJ1204】Word Puzzles【Trie】【暴力】
- (四)为Android系统的Application Frameworks层增加硬件访问服务
- 第8章 IO库
- osg 屏幕坐标和世界坐标转换
- ubuntu14.04LTS命令行安装xfce4桌面
- 自己总结的小tips
- poj 2486 Apple Tree 树形DP
- flume hdfs sink gzip 压缩的问题
- getWritableDatabase()和getReadableDatabase()的区别