Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.82/11: Рейтинг темы: голосов - 11, средняя оценка - 4.82
0 / 0 / 0
Регистрация: 20.01.2017
Сообщений: 5

Next_permutation() и Time Limit

15.07.2017, 05:02. Показов 2383. Ответов 2

Студворк — интернет-сервис помощи студентам
Задача https://www.e-olymp.com/ru/problems/364

Мой код:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <bits/stdc++.h>
using namespace std;
int main()
{
    int n, k;
    cin >> n >> k;
    vector <char> v(15);
    for (int i(0); i < n; i++)
        v[i] = (char)('a' + i);
    for (int i(0); i < k - 1; i++)
        next_permutation(v.begin(), v.begin() + n);
    for (int i(0); i < n; i++)
        cout << v[i];
}
В худшем случае не улаживается в 1 с.
Есть ли возможность ускорить выполнение?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
15.07.2017, 05:02
Ответы с готовыми решениями:

Матрица инцидентности = Time-limit exceeded
Как переделать программу, чтобы время ее выполнения было &lt;0.250 sec? #include &lt;iostream&gt; using namespace std; int main() { long...

Ошибка при решении задачи "Сумма максимума и минимума" - Time limit exceeded
Вот http://********/asp/do/index.asp?main=task&amp;id_course=1&amp;id_section=3&amp;id_topic=34&amp;id_problem=611 Задана последовательность целых...

Next_permutation
Здравствуйте, Вот не понимаю, каким образом алгоритм next_permutation выполняет следующую большую перестановку. Он как-то генерирует...

2
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
12943 / 6810 / 1821
Регистрация: 18.10.2014
Сообщений: 17,235
15.07.2017, 09:19
Цитата Сообщение от ilyasiv Посмотреть сообщение
Есть ли возможность ускорить выполнение?
Разумеется. Забыть об этом подходе навсегда и решить задачу по-другому.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
#include <cassert>
#include <numeric>
#include <string>
#include <iostream>
 
const unsigned FACTORIALS[] = { 1, 1, 2, 6, 24, 120, 720, 5040, 40320, 362880, 3628800, 39916800, 479001600 };
 
std::string word(unsigned k, std::string &abc)
{
  assert(abc.size() < sizeof FACTORIALS / sizeof *FACTORIALS);
  assert(k < FACTORIALS[abc.size()]);
  
  if (abc.empty())
    return {};
  
  unsigned suffixes = FACTORIALS[abc.size() - 1];
  
  unsigned i = k / suffixes; 
  char a = 'a' + abc[i];
  abc.erase(i, 1);
  
  return a + word(k % suffixes, abc);
}
 
std::string word(unsigned k, unsigned N)
{
  assert(k > 0);
    
  std::string abc(N, 0);
  std::iota(abc.begin(), abc.end(), 0);
  
  return word(k - 1, abc);
}
 
int main(void) 
{
  std::cout << word(5, 4) << std::endl;
}
2
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
15.07.2017, 12:34
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
#include <iostream>
#include <set>
using namespace std;
 
int main()
{
    int n, k, j;
    set<char> v;
    
    cin >> n >> k;
    
    j = 'a' + n;
    for (char c = 'a'; c < j; ++c) v.insert(c);
    
    int f = 1;
    for (int i = 2; i < n; ++i) f *= i;
    
    --k;
    --n;
    while (n > 0)
    {
        set<char>::iterator it = v.begin();
        j = k / f;
        for (int i = 0; i < j; ++i) ++it;
        cout << *it;
        v.erase(it);
        k %= f;
        f /= n--;
    }
    cout << *(v.begin());
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
15.07.2017, 12:34
Помогаю со студенческими работами здесь

Использование next_permutation
Правильно ли я использую next_permutation? Мне нужно вывести все перестановки символов данной строки в алфавитном порядке. ...

Перестановки с next_permutation
Есть входные данные 9-12 цифр надо из них создать все возможные перестановки и отправить их в вектор. Задумка do { ...

Перестановки next_permutation + map
Есть большой кусок кода который я написал, попытался использовать перестановку для мапа, именно ключей в лексикографическом порядке...

Не могу разобраться с заданием "Создайте класс Time с конструкторами Time(), Time( int hour)......"
/* Создайте класс Time с конструкторами Time(), Time( int hour), Time(int hour, int min), Time( int h, int m, int s) и ...

Compile-time и run-time методы и функции
Добрый день. Есть две функции, которые делают идентичную работу: template&lt;bool leftShift, typename T&gt; T byteShift(T data) { ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru