№1089
http://acm.timus.ru/problem.aspx?space=1&num=1089
ЖМИ ДАЛЕЕ>>>
#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;
}
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 МБ
Ограничение памяти: 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
Источник задачи: Третье командное соревнование школьников Свердловское области по программированию, 4 марта 2001