hdu 字典树
来源:互联网 发布:找对象软件靠谱吗 编辑:程序博客网 时间:2024/06/06 10:39
题意:给出一个火星文与英文的对应表,然后给出一篇火星文,要求把火星文翻译成英文。
分析:感觉用map很好写,不过网上都是用字典树的,可能用map会超时吧,而且为了练练字典树,也还是用字典树的方法写了。其实也很简单,就是把一个单词插入字典树时,在结尾的结点处记录对应的英文便可。
代码如下:
#include <cstdio>#include <stack>#include <set>#include <iostream>#include <string>#include <vector>#include <queue>#include <list>#include <functional>#include <cstring>#include <algorithm>#include <cctype>#include <string>#include <map>#include <iomanip>#include <cmath>#define LL long long#define ULL unsigned long long#define SZ(x) (int)x.size()#define Lowbit(x) ((x) & (-x))#define MP(a, b) make_pair(a, b)#define MS(arr, num) memset(arr, num, sizeof(arr))#define PB push_back#define F first#define S second#define ROP freopen("input.txt", "r", stdin);#define MID(a, b) (a + ((b - a) >> 1))#define lson l,mid,rt<<1#define rson mid+1,r,rt<<1|1#define lrt rt << 1#define rrt rt << 1|1#define root 1,n,1#define BitCount(x) __builtin_popcount(x)#define BitCountll(x) __builtin_popcountll(x)#define LeftPos(x) 32 - __builtin_clz(x) - 1#define LeftPosll(x) 64 - __builtin_clzll(x) - 1const double PI = acos(-1.0);const LL INF = (((LL)1)<<62)+1;using namespace std;const double eps = 1e-5;const int MAXN = 300 + 10;const int MOD = 1000007;const double M=1e-8;const int N=3010;typedef pair<int, int> pii;typedef pair<int, string> pis;const int d[4][2]={{0,1},{0,-1},{-1,0},{1,0}};int n,m;struct node{ char *word; node *next[26]; node() { word=NULL; MS(next,NULL); }};class trie{public: node *rt; trie() { rt=new node ; } void insert(char s[],char a[]) { node *p=rt; int i=0; while(s[i]) { if (p->next[s[i]-'a']==NULL) { p->next[s[i]-'a']=new node; } p=p->next[s[i]-'a']; i++; } p->word=new char[strlen(a)+1]; strcpy(p->word,a); } char* find(char s[]) { node *p=rt; int i=0; while(s[i]) { if (p->next[s[i]-'a']==NULL) return NULL; p= p->next[s[i]-'a']; i++; } if (!p->word) return NULL; return p->word; } void dfs(node *p) { for (int i=0;i<26;i++) if (p->next[i]) { dfs(p->next[i]); delete p->next[i]; if (p->word) delete p->word; } } void del() { dfs(rt); }};int main(){ int i,j; char s[N],r[N]; scanf("%s",s); trie t; while(1) { scanf("%s",s); if (!strcmp(s,"END")) break; scanf("%s",r); //t.insert(s,r); t.insert(r,s); } j=0; scanf("%s",s); getchar(); while(1) { gets(s); if (strcmp(s,"END")==0) break; for (i=0;s[i];i++) { if (isalpha(s[i])) r[j++]=s[i]; else { r[j]='\0'; j=0; char *p=t.find(r); if (p) cout<<p; else cout<<r; cout<<s[i]; } } if (j) { r[j]='\0'; j=0; char *p=t.find(r); if (p) cout<<p; else cout<<r; } puts(""); } t.del();} /*STARTdog aasay shello hellhi hellofrom fiwohello difhmars riwosfearth fnnvklike fiiwjENDSTARTa aa s hell.!!a aa s hellodifh, i'm fiwo riwosfi fiiwj fnnvk!END */
0 0
- hdu 1671 字典树
- hdu 1800 字典树
- hdu 3460 字典树
- hdu 1251(字典树)
- HDU 2846 字典树
- hdu 1251 字典树
- HDU 1251 字典树
- HDU 1671 字典树
- hdu 1247 字典树
- HDU 2846 字典树
- [字典树]hdu 1075
- hdu 1075 字典树
- hdu 1247 字典树
- 字典树 hdu 1075
- hdu 2846 字典树
- hdu 1247(字典树)
- hdu 1251 字典树
- hdu 1305 字典树
- Android ADB工具-管理设备 app(二)
- C++ 实现单例模式
- oracle 安装问题解决办法大全
- 布尔运算
- SQL数据库的分离附加,导出脚本,备份和还原
- hdu 字典树
- CSS3 timing-function: steps()介绍
- 基础知识---计算机各层网络协议 (图)
- struts2学习笔记(十二)多文件上传
- 广度优先搜索
- UVa 1583 - Digit Generator
- Android使用Universal-ImageLoader在ListView中加载网络图片简单示例
- Java 中使用内存映射文件需要考虑的 10 个问题
- MySQL外键约束