Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 12.06.2016, 20:41   #1
Asya7
Пользователь
 
Аватар для Asya7
 
Регистрация: 30.11.2014
Сообщений: 65
По умолчанию Как осуществить более быстрое выполнение (строки)

Подскажите, как быстрее сделать? Какие вообще есть быстрые способы решения? Моё решение выходить за границу времени.
Слова
(Время: 1 сек. Память: 16 Мб Сложность: 48%)
Для шифрования слов с ними можно производить множество различных операций. Например, интересна такая операция: первые несколько букв заданного слова приписываются к его концу в обратном порядке, после чего удаляются из начала слова. При этом слово a1a2 … akak+1 … an переходит в слово ak+1 … anakak-1 … a1 (число k выбирается в диапазоне от 0 до n).

Для двух заданных слов требуется определить, можно ли применением описанной операции преобразовать первое слово во второе.

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

Входной файл INPUT.TXT состоит из двух строк - на первой из них записано исходное слово, а во второй - предполагаемый результат. Длины строк не превышают 50000 символов.

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

В первой строке выходного файла OUTPUT.TXT выведите "Yes", если преобразование возможно, и "No", если нет. В случае положительного ответа во второй строке выведите k - длину перемещаемой части исходного слова k (из всех таких k выберите минимальный).

Моё решение:
Код:
#include <string>
#include <vector>
#include <iostream>
using namespace std;
int main(){
    string Str2 = "";
    int i = 0, p=0;
    string Strok1 , Strok2; // <50000
    cin >> Strok1 >> Strok2;
    if (Strok1 == Strok2)
    {
        cout << "Yes" << endl << 0;
        return 0;
    }
        int rs = Strok1.size();
    for (i = 1; i <= rs/2; i++)
    {       
        Str2 = Strok1[i - 1] + Str2;
        if (Strok1[i - 1] != Strok2[rs - i])
        {
            cout << "No";
            return 0;
        }
            if (Strok1.substr(i, rs - i)+Str2 == Strok2)
            {
                cout << "Yes" << endl << i;
                return 0;
            }
    }
        cout << "No";
    return 0;
}
Asya7 вне форума Ответить с цитированием
Старый 12.06.2016, 21:52   #2
Asya7
Пользователь
 
Аватар для Asya7
 
Регистрация: 30.11.2014
Сообщений: 65
По умолчанию

Кто-нибудь, подскажите пожалуйста!!!
Asya7 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Условное выполнение одного оператора, если один и более условий истина winhttp C# (си шарп) 6 01.12.2012 23:12
Распараллелить выполнение задачи и осуществить синхронизация подзадач по сети. UDP. [C++ Builder] Radisson Фриланс 1 12.01.2012 04:51
осуществить ввод цифр. осуществить диалог. 13xXx13 Помощь студентам 0 08.12.2011 20:25
Выполнение строки как кода в Delphi Asteroid Общие вопросы Delphi 11 21.09.2009 18:46
Выполнение командной строки z3rg Общие вопросы C/C++ 4 17.04.2009 22:26