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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 28.03.2023, 14:22   #1
ChestIotVaga
Пользователь
 
Регистрация: 21.11.2022
Сообщений: 83
По умолчанию Код не проходит по тайм лимиту?

уже 3 часа мучаюсь
ребят помогите с кодом не проходит по тайм лимиту:
Формат входа. Первая строка содержит исходную строку S, вто-
рая — число запросов q. Каждая из последующих q строк задаёт
запрос тройкой чисел i, j, k и означает следующее: вырезать под-
строку S[i..j] (где i и j индексируются с нуля) и вставить её после
k-го символа оставшейся строки (где k индексируется с едини-
цы), при этом если k = 0, то вставить вырезанный кусок надо в
начало.
Формат выхода. Выведите полученную (после всех q запросов) стро-
ку.
Ограничения. S содержит только буквы латинского алфавита. 1 ≤
|S| ≤ 300 000; 1 ≤ q ≤ 100 000; 0 ≤ i ≤ j ≤ n−1; 0 ≤ k ≤ n−(j−i+1).

Код:
#include <iostream>
#include <string>
using namespace std;

int main() {
    string S;
    int q;
    cin >> S >> q;
    S.reserve(S.length() + q); // резервируем память для добавления подстрок
    for (int i = 0; i < q; i++) {
        int i_pos, j_pos, k_pos;
        cin >> i_pos >> j_pos >> k_pos;
        string sub = S.substr(i_pos, j_pos - i_pos + 1);
        S.erase(i_pos, j_pos - i_pos + 1);
        if (k_pos == 0) {
            S = sub + S;
        } else if (k_pos <= S.length()) {
            S.insert(k_pos, sub);
        } else {
            S += sub;
        }
    }
    cout << S << endl;
    return 0;
}
ChestIotVaga вне форума Ответить с цитированием
Старый 28.03.2023, 15:27   #2
macomics
Участник клуба
 
Регистрация: 17.04.2022
Сообщений: 1,833
По умолчанию

Код:
if (k_pos - 1 < i_pos) {
//   000k123i44j555 -> 000ki44j123555
// Достаточно нескольких перестановок
} else if (k_pos - 1 > i_pos) {
//   000i11j234k555 -> 000234ki11j555
// Достаточно нескольких перестановок, но отдельно учтите случай k_pos > strlen (там будет уменьшаться число перестановок)
}//else if (k_pos - 1 == i_pos) {
//   Ничего не надо делать
//}
macomics вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Почему при указании пути через имя компа сканирование не проходит, а через IP - проходит? Oxidous Операционные системы общие вопросы 2 16.03.2016 11:00
бэкап проходит средствами sql но не проходит средствами 1с so1idsnake Помощь студентам 4 16.09.2013 08:44
ограничение по лимиту 0mega Microsoft Office Excel 1 27.05.2010 10:13
АНОМАЛЬНЫЙ тайм аут! Blef PHP 7 10.09.2009 14:30
Тайм аут для connect() 7KByte Общие вопросы C/C++ 1 29.05.2009 22:01