Очень часто на многих олимпиадах бывает так, часто "бегаешь" от написания одной задачи к отладке/написанию/тестированию другой. Особенно сильно заметно, когда ты пишешь код на ACM-ке и у тебя 5 функций вида solA() solB() ...
Собственно вопрос, как лучше всего хранить несколько решений в одном файле и при этом минимизировать количество изменяемых строк между той версией, что сдаешь, и той, что пишешь?
Ответ: не надо писать решения двух задач в одном файле.
Действительно. зачем? Выигрыша от этого нет абсолютно никакого. Все современные IDE и редакторы позволяют открыть несколько файлов сразу, а путаница добавляется. И две глобальных переменных с одним именем не создашь (у меня редкая задача обходится без глобального массива
a
). Если называть файлы a.cpp, b.cpp и т.д., то сложности с выбором правильного никакой не будет.А если при этом для каждой задачи ещё и отдельную папку делать, то можно в этой папке сохранять, например, стресс-тест или генератор для задачи. Тоже удобство повышается.
Согласен с комментарием выше, но если сильно хочется, то можно применить пространства имен:
Где-то в правилах КФ был пункт, что нельзя обфусцировать решения. Считается ли это обфускацией?
Плюс, можно так получать решения задач. Примерный порядок действий:
1. Пользователь X решил все задачи. Соответственно, его решение по A содержит только исходники задачи A, но его посылка по E содержит исходники всех задач.
2. Я решил A, B. Засылаю лажу по E, лишь бы претесты прошло.
3. Я блокирую задачу E.
4. У меня есть решение задач C, D из исходника задачи E.
Даже если я не планировал обманывать таким образом систему, вполне может сложиться ситуация, когда я решаю A, B, D и нет идей на C (да, бывает). И если я знаю крутой тест или крайний случай в D, я могу пойти хакать и случайно увидеть решение задачи C.
[troll_mode on] Есть ли здесь нарушение правил? [troll_mode off].
Проблем с шаблоном никаких не будет. С дефайнами их вообще быть не может, потому что дефайны ничего не знают о неймспейсах. С typedef-ами проблем тоже не будет, потому что во внутреннем неймспейсе видны все символы из всех внешних, если их не переопределить. Так что шаблон ни в каких случаях копировать не надо.
(Точнее, так: я не могу придумать случаев, когда одной копии шаблона в глобальном неймспейсе недостаточно.)
Разные типы данных для INF. Да, он у меня в шаблоне :)
Аргумент принят.
Хотя, опять же, у нас в команде часто используется
int inf = 1e9
иi64 infl = 1e18
:)