POJ 1035 代码+详细注释

Spell checker

Time Limit: 2000MS Memory Limit: 65536K

Total Submissions: 19319 Accepted: 7060

Description

You, as a member of a development team for a new spell checking program, are to write a module that will check the correctness of given words using a known dictionary of all correct words in all their forms.

If the word is absent in the dictionary then it can be replaced by correct words (from the dictionary) that can be obtained by one of the following operations:

?deleting of one letter from the word;

?replacing of one letter in the word with an arbitrary letter;

?inserting of one arbitrary letter into the word.

Your task is to write the program that will find all possible replacements from the dictionary for every given word.

Input

The first part of the input file contains all words from the dictionary. Each word occupies its own line. This part is finished by the single character ‘#‘ on a separate line. All words are different. There will be at most 10000 words in the dictionary.

The next part of the file contains all words that are to be checked. Each word occupies its own line. This part is also finished by the single character ‘#‘ on a separate line. There will be at most 50 words that are to be checked.

All words in the input file (words from the dictionary and words to be checked) consist only of small alphabetic characters and each one contains 15 characters at most.

Output

Write to the output file exactly one line for every checked word in the order of their appearance in the second part of the input file. If the word is correct (i.e. it exists in the dictionary) write the message: " is correct". If the word is not correct then
write this word first, then write the character ‘:‘ (colon), and after a single space write all its possible replacements, separated by spaces. The replacements should be written in the order of their appearance in the dictionary (in the first part of the
input file). If there are no replacements for this word then the line feed should immediately follow the colon.

Sample Input

i

is

has

have

be

my

more

contest

me

too

if

award

#

me

aware

m

contest

hav

oo

or

i

fi

mre

#

Sample Output

me is correct

aware: award

m: i my me

contest is correct

hav: has have

oo: too

or:

i is correct

fi: i

mre: more me

Source

Northeastern Europe 1998

<span style="color:#000099;">/******************************************
     author    : Grant Yuan
     time      : 2014/10/3 0:38
     algorithm : 暴力
     source    : POJ 1035
*******************************************/
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<cmath>
#include<algorithm>
#include<queue>
#include<string>

using namespace std;
const int MAX=10007;
struct word
{
    char str[15];
    int len;
};

word s[MAX];
int n;
queue<int> ans;
inline bool slove1(word s1,word s2)//判断两个字符串是否相等
{
    if(strcmp(s1.str,s2.str)==0) return 1;
    return 0;
}
inline bool slove2(word s1,word s2)//判断是否可以由一个字符串增加或者减少一个字符得到另一个字符串
{
    int l1=s1.len,l2=s2.len;
    int i,j;
    bool ans=1;
    for(i=0;i<l1&&i<l2;i++)
    {
        if(s1.str[i]!=s2.str[i]) ans=0;
    }
    if(ans) return 1;
    for(i=0,j=0;i<l1&&j<l2;)
    {
      if(s1.str[i]==s2.str[j]){ i++;j++;}
      else i++;
    }
    if(i==l1&&j==l2) return 1;
    return 0;
}
inline bool slove3(word s1,word s2)//是否两个字符串只有一个字符不想等
{
    int ans=0;
    int l=s1.len;
    for(int i=0;i<l;i++)
    {
        if(s1.str[i]!=s2.str[i]) ans++;
    }
    if(ans==1) return 1;
    return 0;
}
int main()
{
    while(!ans.empty()) ans.pop();
    word s1;
    int n=0;
    while(scanf(" %s",s1.str)!=EOF){
        if(strcmp(s1.str,"#")==0) break;
        strcpy(s[++n].str,s1.str);
        s[n].len=strlen(s1.str);
    }
    while(scanf(" %s",s1.str)!=EOF){
        while(!ans.empty()) ans.pop();
        if(strcmp(s1.str,"#")==0) break;
        bool flag=1;
        s1.len=strlen(s1.str);
        for(int i=1;i<=n;i++)
        {
            int l2=s[i].len,l1=s1.len;
            bool ans1=0;
            if(l1==l2){
                if(slove1(s1,s[i])) ans1=1;
            }
             if(ans1){flag=0;printf("%s is correct\n",s1.str);break;}
             if(l1==l2){
                if(slove3(s1,s[i])) ans.push(i);
            }
            if(l1-l2==1){
                if(slove2(s1,s[i])) ans.push(i);
            }
            if(l2-l1==1){
                if(slove2(s[i],s1)) ans.push(i);
            }
        }
        if(flag){
            printf("%s:",s1.str);
            while(!ans.empty()){printf(" %s",s[ans.front()].str);ans.pop();}
            printf("\n");
        }
        }
    return 0;
}
</span>
时间: 2024-10-08 20:41:03

POJ 1035 代码+详细注释的相关文章

ABP+Zero+Metronic+Redis的完美结合快速启动模板(超级代码详细注释版本)

微信扫一扫并支付成功,联系QQ:770628656获取所有源码(超级代码详细注释版本) 原文地址:https://www.cnblogs.com/abpbasic/p/8124792.html

POJ 1035 代码+具体的目光

Spell checker Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 19319 Accepted: 7060 Description You, as a member of a development team for a new spell checking program, are to write a module that will check the correctness of given words us

SAP CRM BOL编程基础,代码+详细注释

网络上可以找到一些使用BOL查询.维护数据的DEMO,但几乎都是单纯的代码,缺乏说明,难以理解.本文除了代码外,还给出了详细的注释,有助于理解BOL编程中的一些基本概念. 这是一篇翻译的文章,你可能会发现部分内容不是很好理解,这时可以直接阅读原文. 原文所在的sapcrmwebui.com是一个不错的博客,然而网站不是很稳定,偶尔会连接不上,建议使用Internet Archive访问. 如果你访问不了Internet Archive,说明你需要一点过墙的手段. 本文链接:http://www.

转载:LBP代码详细注释

%LBP returns the local binary pattern image or LBP histogram of an image.% J = LBP(I,R,N,MAPPING,MODE) returns either a local binary pattern% coded image or the local binary pattern histogram of an intensity% image I. The LBP codes are computed using

linux 守护进程(daemon process)代码-详细注释

1.进程组 组长不能创建新的 会话 2.会话首领可以重新打开控制终端 1 #include <stdio.h> 2 #include <unistd.h> 3 #include <stdlib.h> 4 #include <sys/param.h> 5 #include <sys/stat.h> 6 #include <sys/types.h> 7 #include <fcntl.h> 8 #include <sig

压缩跟踪(CT)代码详细学习_模块1(样本的采集和扩充)

本章主要详解的是compressive tracking框架中的第一部分:样本的采集和扩充部分. 在开始代码学习的前面,你需要知道的理论知识参见论文:Real-time Compressive Tracking.理论理解可以参见我的博客:http://blog.csdn.net/ikerpeng/article/details/19826409 . 这个模块中你需要知道一个基本的概念:代码里面几个变量指的是什么.上一张图: 也许你现在还不知道他们是什么,直接贴代码了.相信有我的注释你一定会懂的.

[ACM] POJ 1035 Spell checker (单词查找,删除替换增加任何一个字母)

Spell checker Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 18693   Accepted: 6844 Description You, as a member of a development team for a new spell checking program, are to write a module that will check the correctness of given word

Qt5_简易画板_详细注释

代码下载链接:  http://pan.baidu.com/s/1hsc41Ek 密码: 5hdg 显示效果如下: 代码附有详细注释(代码如下) 1 /*** 2 * 先新建QMainWindow, 项目名称: DrawWidget 基类选择: QMainWindow, 3 * 类名默认, 然后在DrawWidget项目名上新建c++class文件, 选择基类: QWidget 4 */ 5 //先完成绘图区的实现 6 //如下为: drawwidget.h 7 #ifndef DRAWWIDG

codevs 2924 数独挑战 x(三种做法+超详细注释~)

2924 数独挑战 时间限制: 1 s 空间限制: 1000 KB 题目等级 : 钻石 Diamond 题目描述 Description “芬兰数学家因卡拉,花费3个月时间设计出了世界上迄今难度最大的数独游戏,而且它只有一个答案.因卡拉说只有思考能力最快.头脑最聪明的人才能破解这个游戏.”这是英国<每日邮报>2012年6月30日的一篇报道.这个号称“世界最难数独”的“超级游戏”,却被扬州一位69岁的农民花三天时间解了出来. 看到这个新闻后,我激动不已,证明我们OI的实力的机会来了,我们虽然不是