【POJ】1035 Spell checker
字典树。
#include <iostream>
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <vector>
#include <string>
using namespace std; typedef struct Trie {
int in;
Trie *next[];
} Trie; Trie root;
char map[][];
int nums[], nn; void create(char str[], int in) {
int i = , j, id;
Trie *p = &root, *q; while (str[i]) {
id = str[i] - 'a';
++i;
if (p->next[id] == NULL) {
q = (Trie *)malloc(sizeof(Trie));
q->in = -;
for (j=; j<; ++j)
q->next[j] = NULL;
p->next[id] = q;
}
p = p->next[id];
}
p->in = in;
} int find(char str[], int x) {
int i = , id;
Trie *p = &root; while (str[i]) {
if (i == x) {
++i;
continue;
}
id = str[i] - 'a';
++i;
if (p->next[id] == NULL)
return -;
p = p->next[id];
} return p->in;
} void ffind(char str[]) {
int len = strlen(str), i, j, k;
char ch, bk, bf[];
nn = ; for (i=; i<=len; ++i)
bf[i] = str[i];
for (i=; i<len; ++i) {
bk = bf[i];
for (ch='a'; ch<='z'; ++ch) {
if (ch == bk)
continue;
bf[i] = ch;
j = find(bf, -);
if (j != -)
nums[nn++] = j;
}
bf[i] = bk;
} for (i=; i<len; ++i) {
j = find(bf, i);
if (j != -)
nums[nn++] = j;
}
bf[len+] = '\0';
for (i=; i<=len; ++i) {
k = j = ;
while (j<len) {
if (k != i) {
bf[k] = str[j];
++j;
}
++k;
}
for (ch='a'; ch<='z'; ++ch) {
bf[i] = ch;
j = find(bf, -);
if (j != -)
nums[nn++] = j;
}
}
} int comp(const void *a, const void *b) {
return *(int *)a - *(int *)b;
} int main() {
int n = , f;
char buf[]; for (int i=; i<; ++i)
root.next[i] = NULL; while (scanf("%s", map[n])!=EOF && map[n][]!='#') {
create(map[n], n);
++n;
} while (scanf("%s", buf)!=EOF && buf[]!='#') {
f = find(buf, -);
if (f != -) {
printf("%s is correct\n", buf);
continue;
}
ffind(buf);
printf("%s:", buf);
if (nn) {
qsort(nums, nn, sizeof(int), comp);
for (int i = ; i<nn; ++i) {
if (i && nums[i] == nums[i-])
continue;
printf(" %s", map[nums[i]]);
}
}
printf("\n");
} return ;
}
【POJ】1035 Spell checker的更多相关文章
- 【POJ】1704 Georgia and Bob(Staircase Nim)
Description Georgia and Bob decide to play a self-invented game. They draw a row of grids on paper, ...
- 【POJ】1067 取石子游戏(博弈论)
Description 有两堆石子,数量任意,可以不同.游戏开始由两个人轮流取石子.游戏规定,每次有两种不同的取法,一是可以在任意的一堆中取走任意多的石子:二是可以在两堆中同时取走相同数量的石子.最后 ...
- poj 1035 Spell checker ( 字符串处理 )
Spell checker Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 16675 Accepted: 6087 De ...
- poj 1035 Spell checker
Spell checker Time Limit: 2000 MS Memory Limit: 65536 KB 64-bit integer IO format: %I64d , %I64u J ...
- [ACM] POJ 1035 Spell checker (单词查找,删除替换添加不论什么一个字母)
Spell checker Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 18693 Accepted: 6844 De ...
- 【BZOJ】【1986】【USACO 2004 Dec】/【POJ】【2373】划区灌溉
DP/单调队列优化 首先不考虑奶牛的喜欢区间,dp方程当然是比较显然的:$ f[i]=min(f[k])+1,i-2*b \leq k \leq i-2*a $ 当然这里的$i$和$k$都是偶数啦~ ...
- 【POJ】【2104】区间第K大
可持久化线段树 可持久化线段树是一种神奇的数据结构,它跟我们原来常用的线段树不同,它每次更新是不更改原来数据的,而是新开节点,维护它的历史版本,实现“可持久化”.(当然视情况也会有需要修改的时候) 可 ...
- 【POJ】1222 EXTENDED LIGHTS OUT
[算法]高斯消元 [题解] 高斯消元经典题型:异或方程组 poj 1222 高斯消元详解 异或相当于相加后mod2 异或方程组就是把加减消元全部改为异或. 异或性质:00 11为假,01 10为真.与 ...
- 【POJ】2892 Tunnel Warfare
[算法]平衡树(treap) [题解]treap知识见数据结构 在POJ把语言从G++换成C++就过了……??? #include<cstdio> #include<algorith ...
随机推荐
- Android read-only file system解决方法
adb shell su - mount -o rw,remount /system
- mac下的secureCRT破解方案
Mac下面的SecureCRT(附破解方案) 更新到最新的7.3.2 转自 http://bbs.weiphone.com/read-htm-tid-6939481.html 继续更新到7.3.2的破 ...
- GET和POST本质上有什么区别
如果有人问你,GET和POST,有什么区别?你会如何回答? 我的经历 前几天有人问我这个问题.我说GET是用于获取数据的,POST,一般用于将数据发给服务器之用. 这个答案好像并不是他想要的.于是他继 ...
- android MediaCodec 音频编解码的实现——转码
原文地址:http://blog.csdn.net/tinsanmr/article/details/51049179 从今天开始 每周不定期更新博客,把这一周在工作与学习中遇到的问题做个总结.俗话说 ...
- Android平台的四大天王:Activity, Service, ContentProvider, BroadcastReceiver
今天开始要自学android,刚看到百度知道上面这段话,觉得不错(不过已经是2011年8月的回答了): Android系统的手机的每一个你能看到的画面都是一个activity,它像是一个画布,随你在上 ...
- Windows的计划任务
阅读目录 一:什么是Windows的计划任务? 二:如何设置计划任务 三:高级设置计划任务 一:什么是Windows的计划任务? 在日常的工作中,我们都有一些固定的或临时性的工作,而每次在爱机前一坐, ...
- 【转】iOS-Core-Animation-Advanced-Techniques(四)
原文:http://www.cocoachina.com/ios/20150105/10812.html 隐式动画和显式动画 隐式动画 按照我的意思去做,而不是我说的. -- 埃德娜,辛普森 我们在第 ...
- Spring与Jdbc Demo
方法一:继承JdbcTemplate来实现 1.配置applicationContext <!-- 获取数据源连接 dbcp --> <bean id="dataSourc ...
- SGU 101.Domino (欧拉路)
时间限制: 0.5 sec 空间限制: 4096 KB 描述 多米诺骨牌,一种用小的方的木块或其他材料,每个都被一些点在面上标记,这些木块通常被称为骨牌.每个骨牌的面都被一条线分成两个 方形,两边 ...
- HDU 2295.Radar (DLX重复覆盖)
2分答案+DLX判断可行 不使用的估计函数的可重复覆盖的搜索树将十分庞大 #include <iostream> #include <cstring> #include < ...