1089 Timus answer/Решение задачи 1089

№1089
http://acm.timus.ru/problem.aspx?space=1&num=1089
ЖМИ ДАЛЕЕ>>>

РЕШЕНИЕ [C++ ] :


#include <iostream>
#include <vector>
#include <string>

using namespace std;

vector<string> dict[10];
string s;
char c;
int r;

bool diffWords (string s1, string s2)
{
    int diff=0;
    for (int i=0; i < s1.length(); i++)
    {
 if (s1[i] != s2[i])
     diff++;
    }
    return (diff == 1);
}

int main()
{
    cin >> s;
    while (s != "#")
    {
 dict[s.length()].push_back(s);
 cin >> s;
    }
    cin.get(c);
    s = "";
    while (cin.get(c))
    {
 if ((c >= 'a') && (c <= 'z'))
     s += c;
 else 
 {
     for (int i=0; i < dict[s.length()].size(); i++)
     {
  if (diffWords(s, dict[s.length()][i]))
  {
      s = dict[s.length()][i];
      r++;
  }
     }
     cout << s << c;
     s = "";
 }
    }
    cout << r << endl;

    return 0;
}

1089. Проверка со словарём

Ограничение времени: 2.0 секунды
Ограничение памяти: 16 МБ
Ваша учительница английского языка недавно рассказала вам, что давно мечтает об автоматизации исправления и подсчёта ошибок, которые столь часто делают её ученики. А так как скоро 8-е марта, то внутренний голос подсказал вам, что если вы напишете такую программку и подарите ей, то учительница будет рада и, возможно, более снисходительно отнесётся к ошибкам на вашем экзаменационном сочинении. Задача, собственно, состоит в том, чтобы заменить слова, отличающиеся не более чем одной буквой от словарных, и сосчитать количество сделанных ошибок. Видимо, учительница забыла, что ученики умеют и забывать писать буквы, и писать лишние.

Исходные данные

В первой строке и далее до строки, содержащей единственный символ '#', идут словарные слова по одному в строке, а после строки, содержащей '#', идёт собственно текст, который необходимо проверить. Слов в словаре не более 100, длина каждого слова в словаре не более 8 символов, длина текста для проверки не более 1000 слов, все слова записаны в нижнем регистре, слово может содержать только латинские буквы от 'a' до 'z' (то есть «one-seventh» — это два слова — «one» и «seventh»). Словарь составлен так, что для любого слова возможно не более одного варианта исправления. Текст оканчивается ровно одним символом перевода строки.

Результат

С первой строки выдать исправленный текст, сохраняя все пробелы, знаки препинания, переводы строк и слова, которых нет в словаре; в следующей после текста строке — количество ошибок.

Пример

исходные данные
country
occupies
surface
covers
russia
largest
europe
part
about
world
#
the rushia is the larjest cauntry in the vorld.
it ockupies ebout one-seventh of the earth's surfase.
it kovers the eastern park of yurope and the northern 
park of asia.
результат
the russia is the largest country in the world.
it occupies about one-seventh of the earth's surface.
it covers the eastern part of europe and the northern 
part of asia.
11
Автор задачи: Антон Ботов
Источник задачи: Третье командное соревнование школьников Свердловское области по программированию, 4 марта 2001