Решал одну из простых задач Damascus Collegiate Programming Contest (DCPC 2015). А именно задачу F. Само решение очевидно, буквально пару строк. Поэтому WA крайне удивил. Больше часа искал очевидный баг, случайную запятую после какого-нибудь if'a и так далее, но безуспешно. Посмотрел сабмиты других участников наиболее похожие на мой код и стал плавно менять свой код приближая к чужому AC-коду.
В итоге такой код получает WA: http://pastebin.com/0ErXg0Nw
А такой код AC: http://pastebin.com/Kt585TgD
Разница в том, что строки стали глобальными.
Кто-то может объяснить что вообще происходит и почему так? :|
UPD: проблема решена, тесты по задаче "кривые"
Я полагаю, что ты должен получить Runtime Error из за стека, но в место такой ошибки выдает WA.
Длина строк до 8 символов
Могу приложить посылки с теми же самыми строками, но передаваемыми по ссылке (в том числе строка результата)
код
И этот же AC код, но с глобальными переменными
16035950 Accepted.
Переменные s1 и s2 объявлены до while
Объявление переменных вынесено за пределы цикла и все? Тогда вопрос "что происходит и почему?" остается открытым :)
Причём все компиляторы так себя ведут — G++/G++11/MSC++. WA когда внутри, и AC когда снаружи
Может потому что там количество тестов 16, а написано, что 17?
В общем просто не надо решать контесты от непроверенных авторов))) Эти ребята делают контесты в полигоне и не пишут валидаторы. Там вон еще клар валяется, челик писал на джаве и получил закономерный стектрейс:
но авторы как-то не удосужились все поправить.
Не уверен, что есть возможность скачивать тесты из тренировок. Я не умею.
Однако теперь допускаю такую возможность, что тесты кривые. Код, который пытается работать независимо от числа тестов тоже получает WA2, правда даже с глобальными переменными. Теперь хотя бы очевидно, что это косяк не мой и не компилятора. Спасибо, за идею
Я через тренерский акк посмотрел. Там тест маленький, полностью помещается.
Так большие тесты тоже можно смотреть через ftp, если что
Если задачи из полигона импортированы, то нельзя.
Точно, не знал такого, сорри.
Что-то я сглупил. Я тоже включил "тренера", но размер вывода меня смутил и я даже не подумал о том, что размер ввода намного меньше и отображается.
Тестов действительно 16, вместо 17 указанных. На 17-ый тест необходимо выводить тот же ответ, что на 16-ый (такой код дает AC). Это объясняет, почему глобальные переменные работали, а локальные нет.
Если объявить char[] внутри цикла, считать через scanf, то проходит https://gist.github.com/anonymous/0d56a7c8a91601006153