Форум программистов, компьютерный форум CyberForum.ru

Найти лексикографически минимальный палиндром, который можно получить из слова S - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Консольный ввод/вывод - Перестали работать SetLocale http://www.cyberforum.ru/cpp-beginners/thread1225990.html
После того, как переопределил ввод и вывод обратно в консоль freopen("CON", "w", stdout); freopen("CON", "r", stdin); Перестали работать SetLocale, а также cout << ...<< endl стал выводить без перевода строки В чём может быть проблема?
C++ Создание объекта класса сразу после его описания (между "}" и ";") Пишу проект с дюжиной хедеров и десятком cpp-шников. Мне нужны пара объектов класса А, которые должны существовать на протяжении всей программы. Пытаюсь создать их в хедере сразу после описания класса (так): class A { public: int a; A(int x=0) : a(x) {} } objA; // <-- создание объекта Проблема - компилятор (MSVS 2013) бросает 2 ошибки: error LNK2005: "class A objA"... http://www.cyberforum.ru/cpp-beginners/thread1225973.html
C++ Написать программу для вычисления объема сыпучего вещества V
В баллоне под поршнем с идеальным газом находится сыпучее вещество. Написать программу для вычисления объема сыпучего вещества V, если известно, что при объеме под поршнем V1 давление газа равно P1, а при объеме под поршнем V2 давление газа равно P2. Использовать соотношение P1(V1-V)=P2(V2-V). Возможно ли как то сделать чтобы он сам подобрал нужное значение удовлетворяющее равенству?...
Непонятные элементы в выводе списка файлов директории C++
Всем привет, понадобилось заиметь список файлов в директории, нашел на этом форуме программу #include <stdio.h> #include <dirent.h> #include <string.h> //~ #define NAME_MAX 256 int main(int argc, char **argv) { DIR *dfd;
C++ Визуализация числового массива (создание графика) http://www.cyberforum.ru/cpp-beginners/thread1225932.html
У меня есть числовой массив - числа с плавающей точкой - нет ли какой-нибудь функции или библиотеки для создания графического файла jpg или какого-нибудь другого формата что-бы визуализировать этот массив - естественно получится график.
C++ Вывести предложения, не содержащие запятых Файлы Помогите, пожалуйста. Надо написать программу, которая считывает текст из файла и выводит на экран только предложения, не содержащие запятых. подробнее

Показать сообщение отдельно
John Prick
754 / 687 / 123
Регистрация: 27.07.2012
Сообщений: 1,974
Завершенные тесты: 3
11.07.2014, 14:41     Найти лексикографически минимальный палиндром, который можно получить из слова S
Вот рабочий вариант:
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
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
/*
У Максима есть слово S, и он очень хочет сделать из него палиндром, 
но не желает изменять слишлом большое количество символов.
Помогите Максиму найти лексикографически минимальный палиндром,
который можно получить из слова S заменой не более чем K символов.
Строка A лексикографически меньше строки B, если существует такой
индекс j, что A[j] < B[j] и i < j A[i] = B[i]
 
Входные данные:
Первая строка содержит слово S, состоящее из строчных латинских букв и имеющее длину не более 10^5 символов.
Вторая строка содержит целое число K (0 <= K <= 10^5) — максимально возможное количество замен.
 
Выходные данные:
В единственной строке выведите ответ на задачу. Если сформировать палиндром невозможно, выведите NO.
*/
 
#include <iostream>
#include <algorithm>
#include <string>
 
int main(void)
{
    std::string input;
    int k;
    std::cout << "Enter String: ";
    std::cin >> input;
    std::cout << "Enter Number Of Substitutions: ";
    std::cin >> k;
 
    std::string first_part(input.begin(), input.begin() + input.size() / 2);
    std::string second_part(input.begin() + input.size() / 2, input.end());
    std::reverse(second_part.begin(), second_part.end());
 
    int n = 0;
    std::string::iterator curr1 = first_part.begin();
    std::string::iterator curr2 = second_part.begin();
    while (curr1 != first_part.end())
    {
        std::pair<std::string::iterator, std::string::iterator> curr =
            std::mismatch(curr1, first_part.end(), curr2);
        curr1 = curr.first;
        curr2 = curr.second;
        if (curr1 != first_part.end())
        {
            ++n;
            if (*curr1 < *curr2)
                *curr2 = *curr1;
            else
                *curr1 = *curr2;
            ++curr1;
            ++curr2;
        }
    }
 
    curr1 = first_part.begin();
    curr2 = second_part.begin();
    while ((n < k - 1) && (curr1 != first_part.end()))
    {
        *curr1++ = 'a';
        *curr2++ = 'a';
        n += 2;
    }
 
    std::cout << "\nResult: ";
    if (n <= k)
    {
        std::reverse(second_part.begin(), second_part.end());
        if ((n < k) && (first_part.size() != second_part.size()))
            second_part[0] = 'a';
        std::cout << first_part << second_part;
    } else
        std::cout << "NO";
    std::cout << std::endl;
 
    system("pause");
    return 0;
}
 
Текущее время: 16:36. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru