*извиняюсь, нумерация копироваться не захотела.*
Ура! Наша задача не работает!
Хм. Как такое могло случиться?
Этап 1. Чтение условия
Каждый участник знает все нерешенные задачи через 1,5-2 часа после начала контеста.
Все задачи, кроме совсем простых читают как минимум двое. Читают - это так: прочитали первое слово, подумали, прочитали второе слово, подумали и т.д.
Если вы видите подставу - возьмите ручку и подчеркните ее. Дважды. Если вы видите облегчающее условие - подчеркните ее.
Вам дадут 3 комплекта условий. Выкиньте 2 из них в мусорку. Они будут вас путать. Если вы решили задачу, выкиньте условие в мусорку. Или хотя бы проделайте с ним что-нибудь, что не позволит вам решать ее дальше.
Этап 2. Поиск решения
Говорите вслух. Даже если бред. Даже если совсем бред. Помогает время от времени.
Решайте задачу для меньших размерностей. Иногда, чтобы решить задачу для N=1000000, стоит ее решить для N=1000, а затем улучшить алгоритм.
Если много однотипных данных - сортируйте.
Если надо что-то вычислить (значение функции, количество кроликов и т.п.), возможно поможет бинпоиск.
Если не надо - возможно поможет бинпоиск.
Не забывайте про бинпоиск по ответу.
Этап 3. Написание программы
В каждый момент времени за компом сидит от 0 до 1 человека. Если кто-то знает, как писать какой-то кусок программы - пусть сядет и напишет. Можно смотреть через плечо и указывать на ошибки (лишь указывать).
Если человек сидит за компом - он пишет задачу. Если ему надо подумать - он не сидит за компом. Иногда удобно писать две задачи. Особенно, если есть сложная техническая задача, которую просто долго прогать.
Писать можно сверху вниз или снизу вверх. Первое - вы пишете мелкие функции (например, GCD), затем покрупнее (что-нибудь, вызывающее GCD), а потом сам код. Второе - пишем код проги, смотрим, какие функции не написаны, пишем, смотрим, что еще не написано, пишем и т.д. Первый способ как правило быстрее, зато второй позволяет взглянуть на общий ход решения и не писать некоторые из функций. Я пишу, начиная с самой сложной части, т.к. если я ее не напишу, то на задачу можно забить.
Сначала напишите ввод данных. Это поможет вам собраться с мыслями. Если надо еще собраться с мыслями, напишите и вывод.
Если вы делаете допущение, которое планируете исправить перед отправкой - оставьте пометку в комментах или на листочке. Время окупится.
Этап 4. Отправка решения
Вы написали решение и хотите отправить. Не делайте этого. Вы забыли freopen.
Итак, вы не забыли freopen. Проверьте решение на тестах из условия.
Пусть один из участников напишет несколько тестов, пока другой пишет задачу.
Проверьте крайние случаи. При N=1 и т.п. могут возникать интересные глюки.
Проверьте свою программу на выход за границы типа (иногда ответ не влезает в int), за границы массива (иногда не хватает одного элемента - обидно)(иногда вы по привычке индексируете массив с 1), а также на деление на 0. Заметим, что если число много раз делится на 2, то может пройти решение с long double вместо long long.
Если ваша программа вызывает cin или cout больше 10000 раз - замените их на scanf и printf. Иногда программа ТЛится только поэтому. Если забыли - помните про getchar и putchar и мучайтесь.
Подумайте, сколько работает ваша программа. Бывает так, что вы написали мега крутой алгоритм за n*log(n), а потом выводите результат, тратя на это n*n действий.
Проверьте, нет ли у вас разных переменных с одинаковым названием. Помните про локальные переменные.
Проверьте скобки в выражениях. Например в a^b==0 сначала выполнится равенство, а потом ^. Если не уверены - поставьте побольше скобок.
y0 и y1 - функции в cmath.
abs лежит в cstdlib. fabs лежит в cmath.
Итак, вы все исправили, все проверили и хотите отправить решение. Не делайте этого. Вы закомментили freopen.
Этап 5. Отправка решения
Проверьте компилятор. Проверьте, тот ли файл вы отправляете. Проверьте еще раз. Один раз я 2 часа сабмитил пустой код, а потом заметил это.
PE/WA/RE/TL на первом тесте. Поздравляю. Вы таки забыли freopen.
PE/WA. Вы не умеете писать английские слова и ошиблись в названии файла или в слове Impossible или ...
RE может означать выход за границы массива. Выход за границы массива не обязательно означает RE. Спасибо странной адресации C++.
WA 48+. Переполнение всего и вся. Скорее всего.
WA 5. Не разобран случай. Скорее всего. Или неправильная идея.
Иногда можно запустить рекурсию глубины в 100000 функций. Иногда нельзя. Помните об этом. Не обьявляйте статические массивы внутри функций. main - это функция.
TL - есть два варианта. Программа работает 100 лет или вечно. Узнайте, что у вас.
Если у вас неограниченная печать - печатайте после каждой отправки сразу же. Успешные можно оставить на память. Если ограниченная печать - смотрите по ситуации. Чтобы искать багу - комп нужен далеко не всегда.
OK. Отложите эту задачу и порешайте другие. Например, посмотрите, что сдают в табличке и попробуйте порешать то же самое.