Архив за 10.11.2010

Решение задачи «Email-адрес»

Задача была взята с сайта codeforces.ru (турнир (Codeforces Beta Round #40 (Div. 2), задача C), ниже приведено полное решение этой задачи.

Условие

Иногда email-адреса приходится диктовать по телефону. Точку обычно называют словом dot, а собаку at. В результате получается что-то вроде vasyaatgmaildotcom. Ваша задача — преобразовать это в корректный email-адрес (vasya@gmail.com).

Известно, что корректный email-адрес содержит только символы . @ и маленькие латинские буквы, не начинается и не заканчивается точкой. Также, корректный email-адрес не начинается и не заканчивается собакой. Более того, email-адрес содержит ровно один символ @ но при этом может содержать любое (возможно, нулевое) количество точек.

Требуется произвести серию замен, чтобы длина результата оказалась как можно меньше, и он являлся корректным email-адресом. При равенстве длин нужно вывести лексикографически минимальный результат.

Всего возможно два варианта замены: dot можно заменить на точку, at можно заменить на собаку.

Входные данные

В первой строке содержится описание email-адреса. Гарантируется, что это — корректный email-адрес, в котором все точки заменены на dot и собака заменена на at. Строка не пуста, и ее длина не превосходит 100 символов.

Выходные данные

Выведите кратчайший email-адрес, из которого могла быть получена указанная строка путем указанных выше замен. Если решений несколько, выведите лексикографически минимальное (лексикографическое сравнение строк реализует оператор < в современных языках программирования). Символы идут в таблице ASCII в следующем порядке: . @ ab…z

Решение на C++
#include <iostream>
 
int main()
{
    std::string str, result;
    getline(std::cin, str);
 
    unsigned int pos;
 
    // replace at
    pos = str.find("at", 1);
    if (pos != std::string::npos) {
        str.replace(pos, 2, "@");
    }
 
    // replace dot
    pos = str.find("dot", 1);
    while ( (pos != std::string::npos) && (pos != str.size() - 3) ) {
        str.replace(pos, 3, ".");
        pos = str.find("dot", 1);
    }
 
    std::cout << str << std::endl;
    return 0;
}

Решение задачи «Перевод»

Задача была взята с сайта codeforces.ru (турнир (Codeforces Beta Round #40 (Div. 2), задача A), ниже приведено полное решение этой задачи.

Условие

Перевод с берляндского языка на бирляндский — задача не из легких. Эти языки очень похожи: слово на бирляндском языке отличается от такого же по смыслу слова на берляндском только тем, что оно пишется (и произносится) наоборот. Например, слову code в берляндском языке соответствует слово edoc в бирляндском. Несмотря на это, при «переводе» легко ошибиться. Вася перевел слово s с берляндского на бирляндский как t. Помогите ему: определите, правильно ли он выполнил перевод?

Входные данные

В первой строке записано слово s, во второй строке записано слово t. Слова состоят из маленьких латинских букв. Входные данные не содержат лишних пробелов. Слова непустые, и их длины не превосходят 100 символов.

Выходные данные

Если слово t является словом s, записанным наоборот, выведите YES, иначе выведите NO.

Решение на C++
#include <iostream>
 
int main()
{
    std::string str, temp;
    getline(std::cin, temp);
 
    int len = temp.size();
    for (int i = 0; i < len; i++) {
        str += temp[len - i - 1];
    }
 
    getline(std::cin, temp);
 
    if (str == temp) {
        std::cout << "YES" << std::endl;
    } else {
        std::cout << "NO" << std::endl;
    }
    return 0;
}
Перейти к верхней панели