Блог пользователя MikeMirzayanov

Автор MikeMirzayanov, история, 9 лет назад, По-русски

Работая со студентами, я часто сталкиваюсь с тем, что если задача не кажется им понятной с первого взгляда, то они и не могут ее решить. В самом деле, всегда рассказывают конкретные методы и приемы, но не то, как надо думать, чтобы применить их. В этой заметке я попробую обобщить мой опыт решения задач на соревнованиях по программированию. Впрочем, некоторые советы будут применимы и для олимпиад по математике или первых шагов в научной работе.

Итак, вы прочли задачу и не знаете как ее решать. Попробуйте следующие приемы, зачастую какой-то из них может помочь.

Прием 1: "Вспомнить всё"

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

Прием 2: "От частного к общему"

Представьте, что вы нашли решение задачи (ура!) Рассмотрите какой-то частный случай задачи. К нему, конечно, может быть применен алгоритм решения задачи. Поэтому, чтобы решить общую задачу вам необходимо решить все ее частные случаи. Попробуйте решить какой-либо частный случай (или несколько) и потом попытайтесь обобщить их до решения основной задачи. Такие частные случаи можно рассматривать как упрощения задачи, то есть рассуждать по принципу: "если я не знаю как решать сложную задачу, попробую-ка я ее упростить и найти решения упрощенной версии".

Популярные примеры упрощений (частных случаев):

  • вам сформулирована задача для дерева, рассмотрите ее вариант, когда дерево вырождается в путь;
  • в задаче фигурируют веса? рассмотрите вариант, когда все веса равны единице, или произвольному числу или есть только два различных веса (и так далее).

Обратите внимание, что решение частного случая почти всегда не проще общего, поэтому надо пытаться найти максимально простое или эффективное решение.

Прием 3: "Смелая гипотеза"

Не стесняйтесь делать смелые гипотезы, которые вам кажутся правдоподобными. Далеко не всегда на контестах надо доказывать решения, развивайте внутреннюю интуицию. Сделав гипотезу, попробуйте ее доказать — возможно, это получится или даст понимание как её опровергнуть. Обязательно потестируйте гипотезу на широком наборе тестов, ведь будет очень обидно потратить время на реализацию решения на базе её и опровергнуть только после этого.

Примеры частых гипотез:

  • ответ всегда существует;
  • количество состояний небольшое.
Прием 4: "Чтобы решать задачу, ты должен думать как задача"

В самом деле, поставьте себя на место лирического героя задачи, представьте что это ваша работа обрабатывать наборы входных данных. Подумайте как бы вы действовали в этом случае. Попробуйте обработать самостоятельно несколько небольших примеров. Если задача про игру, поиграйте в нее. Иногда я пытаюсь визуализировать процесс или модель, чтобы лучше его понять. Это немного похоже на то, как показывают в фильмах способ мышления ученых. Попробуйте думать образами, представьте ответ, посмотрите на то, как он получается.

Прием 5: "Думаем вместе"

Этот прием применим только в командных контестах. Вдвоем или втроем начинайте по очереди озвучивать какие-то понятные факты про задачу. Например: "если n четное, то ответ всегда 0", "если n простое, то решать надо так" и так далее. Иногда ваши коллеги будут подхватывать идеи и развивать их, так можно и дожать идею решения задачи до конца.

Прием 6: "Подбери метод"

Попробуйте перебрать популярные алгоритмы или методы, которые хоть как-то могут оказаться применимы для задачи. Полезно посмотреть на ограничения по задаче. Зафиксировав метод, попробуйте подумать над решением предположив, что задача решается с применением этого метода. Надо рассуждать как-то так: "Пусть задача решается с помощью разделяй-и-властвуй. Тогда пусть мы рекурсивно решили задачу для левой и правой половине, осталось как-то объединить эти ответы, как бы это сделать..."

Прием 7: "Распечатать-посмотреть"

Очень часто (особенно в задачах с небольшим вводом — одно/два числа) возникают какие-то закономерности в построении ответа. Чтобы увидеть закономерность иногда достаточно написать какой-то наивный метод решения задачи, сгенерировать ответы для большого количества тестов на небольших ограничениях и немного помедитировать над ответами. Чтобы не занимать компьютер, лучше распечатать полученные результаты и медитировать уже над листочком.

Иногда полезно выводить не только сам ответ, но и какую-то дополнительную информацию, например, способ получения ответа.

Прием 8: "Гуглим"

Этот прием можно применять, только если правила раунда/контеста это разрешают. Если задача на последовательности, то можно поискать ответы (см. прием 7) на сайте https://oeis.org/. Полезно понять формальную модель задачи и гуглить по правильным математическим терминам.

Вопрос к знатокам

А какие общеприменимые приемы используете вы?

  • Проголосовать: нравится
  • +731
  • Проголосовать: не нравится

»
9 лет назад, # |
  Проголосовать: нравится +47 Проголосовать: не нравится

Построить для задачи A такую задачу B, чтобы они друг к другу сводились (ну или хотябы A сводилась к B, и B визуально была не сильно сложнее), и при этом задача B формулировалась как можно проще.

»
9 лет назад, # |
Rev. 2   Проголосовать: нравится +66 Проголосовать: не нравится

Прием 4 немного сомнителен :)

Прием 2 стоит отдельного поста. Очень часто работает убирать ограничения, фиксировать константы, считать числа простыми и так далее, кроме того, это отсекает очень много неприменимых методов для приема 6.

Прием А: "попытайтесь обобщить задачу". Как прием 2, только наоборот. Например, на одном NEERC была задача, в которой нужно было считать подотрезки массива, для которых побитовая сумма по модулю два равна побитовому и. А что, если это произвольные операции? Такая задача звучит совсем страшно. Значит, есть какая-то особенность в операциях. Внимательно смотря их, находим, что значение побитового и на отрезке меняется не более числа бит раз при пополнении отрезка. Дальше — дело техники.

Прием Б: "уменьшайте произвольность". Например, порядок чисел ввода не важен — рассмотрите числа в порядке, в котором удобнее. Кажется банальностью, но очень часто забывается.

Прием В: "ищите факты". В поисках помогает прием А, 2, опыт и сокомандники. Если в задаче есть операция, часто полезно искать ее инварианты. Если в задаче (региональный этап 2014 года, задача 8) сильно связный турнир — порисуйте, рано или поздно заметите, что в нем всегда есть гамильтонов цикл. Если задача не похожа на стандартную, ключевой факт в ней обычно есть.

Прием Г: "знайте сильные методы". Некоторые методы, вроде hevy-light и центральной декомпозиции дерева, персистентной дерамиды, пары стандартных sqrt-декомпозиций и суффиксного дерева настолько сильные, что решают почти все задачи в некоторой области. Обычно они, что называется, слишком много букв для этой задачи, но когда нечего делать, можно просто сесть и написать. И надеюсь, я никогда не буду решать контест, в котором авторское решение будет использовать персистентную дерамиду, записанную в вершинах суффиксного дерева.

Прием Е: "это динамика". Не приспособлен для частого применения. Ваш сокомандник говорит вам: "я придумал, это динамика". Вы тут же понимаете, какая, рассказываете. Ваш сокомандник отвечает: "круто, а я пошутил".

  • »
    »
    9 лет назад, # ^ |
      Проголосовать: нравится +8 Проголосовать: не нравится

    Я знаю задачу с потоком на суффиксном автомате и задачу с персистентным декартовыми деревьями в вершинах графа, которые как-то друг через друга пересчитываются.

    А вот с суфдеревом и персистентными декартовыми — еще нет :(

    • »
      »
      »
      9 лет назад, # ^ |
        Проголосовать: нравится 0 Проголосовать: не нравится

      А мне вот izban писал, что вы сдавали какую-то задачу с Moscow SU Tapirs contest в птз с помощью персистентных дерамид в суффиксном автомате...

»
9 лет назад, # |
  Проголосовать: нравится +22 Проголосовать: не нравится

"Принцип узких мест"

Представьте что вам нужно поймать человека, который едет на машине от ВДНХ к МГУ, хотя вы понятия не имеете как он поедет, он точно будет в какой-то момент переезжать через Москву-реку, поэтому поставим засады на всех мостах. Можно применить схожую идею к решению задач, хотя это во много перекликается с пунктом 2: "не знаю как будет устроена эта структура, но она точно будет уметь отвечать на запрос суммы и порядковой статистики, где бы мне такую взять?"

»
9 лет назад, # |
Rev. 3   Проголосовать: нравится +49 Проголосовать: не нравится

A bunch of answers on Quora (including one from me).

  • »
    »
    9 лет назад, # ^ |
      Проголосовать: нравится +37 Проголосовать: не нравится

    Hello, I have nothing but respect for you; just pointing out that you probably meant "Quora" :)

»
9 лет назад, # |
  Проголосовать: нравится +4 Проголосовать: не нравится

Опишу два моих приёма.

Частный случай приёма 4. Пусть у нас есть объекты с какими-то свойствами, например, элементы массива с позицией и значением. Назовём эти свойства координатами X и Y, нарисуем их на плоскости, попробуем переформулировать задачу в геометрических терминах — вдруг надо найти что-то очевидное? Другой пример: для событий на прямой можно считать X — координатой на прямой, а Y — временем, тогда красиво выражаются всякие условия вроде "у нас ограничена скорость движения по прямой" (а если еще и аффинное преобразование сделать, вообще получим что-то на углах в 90 градусов). Еще пример: если у нас есть объекты разной стоимости и веса и надо что-то считать или узнавать про средние значения в каких-то подмножествах, можно наверняка свести к задаче про центр тяжести и применить физического капитана Очевидность (например, "центр тяжести лежит в выпуклой оболочке" или "любую точку внутри или на границе выпуклой оболочки можно получить в качестве центра тяжести при неотрицательных весах, и только их").

Двойственный приём: свести всё к безликим буквам и формулам. Работает нечасто, у меня обычно срабатывал в задачах на строки, где есть какая-нибудь динамика. Берём формулу перехода, записываем в алгебраической форме, что-то сокращаем, что-то перегруппировываем, в какой-то момент обнаруживаем, что у нас всё распалось на сумму независимых кусков, каждый из которых по отдельности можно быстро и понятно найти. Например, подсчитав какой-то кусок в отдельной динамике. При этом физический смысла у этих кусков может быть в стиле "гармоническое среднее рейтинга на Codeforces и TopCoder с коэффициентами sin 2 и cos 6", но ничего страшного. Главное — не запутаться в буквах по дороге.

»
9 лет назад, # |
  Проголосовать: нравится +9 Проголосовать: не нравится

Еще парочку приемов:

0) Перечитать задачу еще раз. Если идет непроходимый ступор — очень часто спасает. Вернее, следующая комбинация. Перечитать задачу. Посмотреть на ограничения. Перечитать задачу. Посмотреть на семплы. Перечитать задачу. Прокрутить, как это связано. Перечитать задачу. Нарисовать несколько тестов. Перечитать задачу...

1) Уйти в сторону от задачи. Может быть, есть смысл подумать, зачем автор включил эту задачу в контест. Может быть, стоит попытаться решить какую-то другую задачу вместо этой. Не с более маленькими ограничениями, а вообще другую, с другим условием. Может быть, нам это как-то поможет. Понимаю, что это достаточно расплывчатый совет, но нужно, наверное, интуитивно чувствовать, когда и как стоит это попытаться применить.

Прием 2, как было написано, стоит отдельного поста. Попробую рассмотреть то, какими именно вариантами можно применять этот пункт, и заодно найдем еще вариант решения:

1) Ограничения сделать более простыми. Допустим, в задаче есть ограничения n = 100500, m = 300228. Становится понятно, что задачу в таких случаях нужно решать за O((n + m) * log(n)), O((n + m)(3 / 2)) или быстрее. Ну, в крайнем случае можно накинуть еще логарифм сверху, но это уже нужно будет упихивать. Попробуем решить эту задачу за O(n2). Получилось? Тогда, может, можно заменить это какой-то структурой данных? Или заметить, что стоит рассматривать не все переходы, а только, допустим, делители числа n? Не получилось решить за O(n2) — решаем за куб! Если этого не получилось — может, мы хотя бы с помощью перебора можем найти ответ? Не получилось так — давайте попробуем поиграться с другими ограничениями: что, если все числа влазят в int? И так далее. Рано или поздно, мы сможем найти решение хоть для какого-то варианта, хотя бы сможем понять, как получается семпл)

И в этот момент рождается еще один вариант, как можно придумать решение задачи. Ведь перебор-то, особенно для маленьких тестов, мы можем вполне и у себя в голове прокрутить. Сгенерируем маленький тест. Если это граф — нарисуем его на бумажке, и попробуем применить наш перебор(вообще говоря, это может быть и не перебор). Распечатка тут зачастую не годится — ведь ты не знаешь заранее, что ты должен распечатать. Может, это состояние в вершинах. А может, в ребрах. А может, это вообще какое-то хитрое произведение вершины на квадрат веса ребра и на номер этой вершины в обходе, зависящем от фазы луны. Это можно выяснить только прокрутив решение в голове. Далее, как только мы получили с помощью перебора ответы на тест — пробуем применять смелые идеи. И, опять-таки, не стоит торопиться распечатывать. Потому что, рисуя и прокручивая идею на бумажке, мы не просто какие-то цифры выводим — мы видим, как они получаются, и где конкретно у нашей смелой идеи возникли затруднения Вполне возможно, что и тест сойдется — но, прокручивая идею в голове, мы поймем, что, например, если бы у ребра был вес не 6, а, например, 7 — ничего бы не сошлось. А при весе 8 опять бы сошлось. Так что распечатывание, безусловно, разгружает руки и голову — но иногда голову и руки полезно загрузить, хотя бы на мелких тестах.
В ходе такого мыслительного процесса может возникнуть понимание, что на малых тестах проблемы возникнуть не может. Зато может возникнуть на больших. Тогда уже можно распечатать и посмотреть — ведь мы уже знаем, где искать проблему.
Я бы этот метод назвал бы "поставить себя на место нашего решения". Это все-таки отличается от метода "поставить себя на место задачи", хотя иногда может и совпасть с этим методом. Вернемся все-таки к пункту 2

2) Ограничения сделать более жесткими. Казалось бы, глупость. Но иногда бывает, что при более жестких ограничениях задача решается проще. Вот только не совсем с той асимптотикой, которую бы хотелось... Тогда возвращаемся к идее решения "поставить себя на место решения" и попробуем понять, что с этим можно сделать. В комбинации с первым методом(кое-что упрощаем, кое-что усложняем) работает замечательно, если мы правильно выстроим цепочку упрощений-усложнений.

3) Вид структуры. Как было уже сказано, вместо дерева делаем путь, вместо графа — дерево или двудольный граф, вместо строки — число. Далее все, как уже было выше. Ну и различные комбинации того, что было сказано выше.

»
9 лет назад, # |
  Проголосовать: нравится -36 Проголосовать: не нравится

На котестах у меня есть выбор или думать или писать решения, поэтому я пишу решения. Если я начну их придумывать у меня просто не будет времени их запрогать...

Помогите найти контртесты плиз: http://codeforces.me/blog/entry/20556

»
9 лет назад, # |
  Проголосовать: нравится +28 Проголосовать: не нравится

Предположить, что ответ Х. Применяется скорее в купе с другими приемами как Прием 6: "Подбери метод" или со вторым приемом из http://codeforces.me/blog/entry/20548?locale=ru#comment-252650

В некоторых случаях, если зафиксировать ответ и поиграться с формулой, то можно переформулировать задачу во что-то более решаемое. На ум приходит 236. Greedy Path. В ней требуется найти цикл максимизирующий: . Допустим у нас есть субоптимальный ответ A и мы хотим проверить, можем ли мы найти что-то лучше, тогда можно немного поиграться с неравенством:

Если за стоимость ребра принять  - Cost(e) + A·Time(e), то это уже более известная задача.

  • »
    »
    9 лет назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится

    Ну кстати, последнее, видимо, часто встречается в задачах на оптимизацию дробей. Туда же "найдите разрез наименьшего среднего веса".

»
9 лет назад, # |
  Проголосовать: нравится +63 Проголосовать: не нравится

1) Правило 8 самое классное, да. Особенно на контестах вроде GCJ или FHC куча индусов оставляют код в публичном доступе во всяких git\ideone, скопипастил, заслал, прошёл на онсайт. Ну или квал не прошёл, как повезёт.

2) Модификация приёма 5, "Думайте вместе". Дайте задание своим двум сокомандникам думать над задачей, а сами тем временем попейте чаю или посидите с умным видом.

3) Приём "Подсмотреть-подслушать". Если у Вашей команды идей нет никаких по задачам, а рядом сидит команда из трёх красных и громко обсуждает решение задачи J, то стоит прислушаться к отцам и возможно "позаимствовать" их идею.

4) Приём "отсекай-упихивай". Напишите решение, которое работает за неполиномиальное время, например перебор, и путём нехитрых оптимизаций, упихиваний и огненных жертвоприношений Владыке Света затолкайте его.

  • »
    »
    9 лет назад, # ^ |
      Проголосовать: нравится +37 Проголосовать: не нравится

    С помощью приёма 3 в Петрозаводске задачи сдавались пару раз. Да, я понимаю, что нехорошо и всё такое, но блин. Ты почти придумал решение, остался какой-то мелкий факт, и вдруг кто-то из соседней команды его громко произносит. Как считать, честно такое или не очень? А если это не сборы, а полуфинал, допустим?

    • »
      »
      »
      9 лет назад, # ^ |
      Rev. 2   Проголосовать: нравится +76 Проголосовать: не нравится

      Помню, в каком-то Петрозаводске авторы неверно указали файлы для ввода/вывода. Пишем какую-то халявку. Отсылаем, получаем минус. Смотрим — у всех тоже минусы/сдачи с +1, кроме Гены, у которого +. Заходим на сайт, уточняем файлы. После контеста спрашиваем Гену, как ему удалось сдать с плюса. "Я слушаю, все матерятся, ну я и посмотрел перед отправкой"

      • »
        »
        »
        »
        9 лет назад, # ^ |
          Проголосовать: нравится +80 Проголосовать: не нравится

        Самое подозрительное в этой истории, что Гена слушает, когда все уже вовсю отсылают.

        • »
          »
          »
          »
          »
          9 лет назад, # ^ |
          Rev. 2   Проголосовать: нравится 0 Проголосовать: не нравится

          Я могу даже сказать точнее: это был 6 контест 2013 года. Задача J. По ней в итоге, разумеется, был реджадж. В его комнате материлась команда Saratov SU#2.

  • »
    »
    9 лет назад, # ^ |
      Проголосовать: нравится -38 Проголосовать: не нравится

    Дополнение к "Подсмотреть-подслушать":

    Часто когда команда решила задачу, она откладывает листочек с условием (а за одно и идеями решений) куда-нибуть подальше, например к краю стола. Иногда удавалось подсмотреть рисунки и ухватить идею.

»
9 лет назад, # |
Rev. 3   Проголосовать: нравится 0 Проголосовать: не нравится

Technique 2 appears to be unformatted on my browser. Anyway, thanks so much for this!

Thanks for the edit! :)

»
9 лет назад, # |
  Проголосовать: нравится +5 Проголосовать: не нравится

Auto comment: topic has been updated by MikeMirzayanov (previous revision, new revision, compare).

»
9 лет назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится

Thanks for editorial!

»
9 лет назад, # |
  Проголосовать: нравится +5 Проголосовать: не нравится

Когда решаешь задачу, бывает полезно поперебирать алгоритмы, которые ты знаешь. Можно посмотреть на ограничения. Например, если ограничение 10^5, то наверно решение работает за O(N * logN) и тогда стоит перебирать алгоритмы, которые работают за такую сложность (в нашем случае — это сортировка, бинпоиск для каждого элемента, кучи). Попробовать подставить каждый алгоритм в решение задачи. Один из них скорее всего верный.

  • »
    »
    9 лет назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится

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

»
9 лет назад, # |
  Проголосовать: нравится +28 Проголосовать: не нравится

Команды средней силы часто пользуются текущей таблицей результатов, чтобы определить метод решения. Умозаключения вида "если это говно сдало задачу G, значит там тупо жадник" частенько оказываются полезными для таких команд. Также, глянув на таблицу, в которой Burunduk1 не может с 10 попыток сдать E, можно понять, что куб там не упихивается.

  • »
    »
    9 лет назад, # ^ |
      Проголосовать: нравится +41 Проголосовать: не нравится

    Павел, я, конечно, понимаю, что Вы из Сибири, суровый сибирский мужыг, но, может, все-таки не стоит обзывать другие команды коричневым словом?

»
9 лет назад, # |
  Проголосовать: нравится +56 Проголосовать: не нравится

you know you are at the right online judge when CEO himself makes time to write tutorials.<3 CF <3

»
9 лет назад, # |
  Проголосовать: нравится -41 Проголосовать: не нравится

" Google " is most helpful technique!

»
9 лет назад, # |
  Проголосовать: нравится +8 Проголосовать: не нравится

Here's another technique to find solution which I think isn't covered here. Assume that you already have generated some data or you've already solved a part of the problem. Now using those, can you solve the rest of the problem? If yes, then solve the first part now. It's kind of fast prototyping.

»
9 лет назад, # |
Rev. 3   Проголосовать: нравится +45 Проголосовать: не нравится

The Feynman Algorithm is another way to do it:

  1. Write down the problem.
  2. Think real hard.
  3. Write down the solution.
»
9 лет назад, # |
  Проголосовать: нравится -13 Проголосовать: не нравится

Я бы добавил, что перед отправкой желательно протестировать задачу на крайних случаях или макстестах, если это возможно. Далеко за примерами ходить не приходится, задача 570В. Очевидно, что крайний случай n=1, m=1. Но из-за того, что многие не проверили у себя этот тест, по этой задаче было огромное количество взломов.

  • »
    »
    9 лет назад, # ^ |
      Проголосовать: нравится +8 Проголосовать: не нравится

    Тема: "Как придумывать решения задач: приемы", какое проверить перед отправкой :)

»
9 лет назад, # |
Rev. 3   Проголосовать: нравится 0 Проголосовать: не нравится

Can you please shed some more light on technique 4, preferably using examples? Also, one example of technique 2 that can really show the power of boiling down specific problem's solution into a general solution would make it great.

»
9 лет назад, # |
  Проголосовать: нравится +5 Проголосовать: не нравится

Есть старая книжка Д. Пойа "Как решать задачу". Там конечно про чисто математические задачи (и даже с упором на геометрические) но по-моему там много хороших идей которые можно перенести и на задачи из СП.

»
9 лет назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится

Do you know any examples for 3rd and 4th techniques ?

»
9 лет назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится

For the Technique 7, I wonder that in C++ using Code::Blocks, complier GCC, is there any way to pause the black window when we run a program, so that we can look the numbers we printed out?

I mean, if I print out all of the numbers I want to look, the numbers will be full of the black window and they will be quite hard to check. I want to check them step by step at different moments.

In Pascal, we can use readln;.

In Code::Blocks, I tried system("pause");, getchar();, but they didn't work.

  • »
    »
    9 лет назад, # ^ |
      Проголосовать: нравится +8 Проголосовать: не нравится

    What's your OS? What exactly do you mean by "system("pause") didn't work"?

    • »
      »
      »
      9 лет назад, # ^ |
        Проголосовать: нравится 0 Проголосовать: не нравится

      My OS is window 10, but I think it doesn't matter. And system("pause"); is a command in C++, included in library . It will pause the black screen until we press any key, sometimes it works, sometimes it dosen't.

      • »
        »
        »
        »
        9 лет назад, # ^ |
          Проголосовать: нравится +9 Проголосовать: не нравится

        It matters. system("pause") is not a C++ command, it's a C++ function system which calls OS' command which you pass as an argument. You can write system("dir") as well and your program will print listing of current directory, but that works on Windows only. On Linux you will write system("ls") to achieve similar effect.

        Would you mind testing the following program? Does it always pause when you run it in Code::Blocks?

        #include <stdlib.h>
        int main() {
            system("pause");
            return 0;
        }
        

        By the way, I believe that Code::Blocks should automatically prevent console window from closing if you chose "Console Application" as project type in the beginning. You can also try running the application in debug mode or put a breakpoint on the last operation in main.

      • »
        »
        »
        »
        9 лет назад, # ^ |
          Проголосовать: нравится +9 Проголосовать: не нравится

        Another suggestion is here. The post tells you how to enable program to auto-exit after termination, you need the exact opposite, I believe that you can figure what to do yourself (of course, if the settings are still here in the latest version of Code::Blocks).

»
5 лет назад, # |
  Проголосовать: нравится +14 Проголосовать: не нравится

Wonderful Tips and Techniques. Thanks a lot.

»
3 года назад, # |
  Проголосовать: нравится +5 Проголосовать: не нравится

Thank you for these pieces of advice!