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

Автор Sultan, 12 лет назад, По-русски

Руки кривые, можете не смотреть. Полезной инфы здесь не много.

Пытаюсь дорешать задачу с командной neerc, которая была 20 октября. Задача B "Берляндский футбольный союз". Алгоритм вроде правильный, да и реализован тоже вроде верно, НО выдает ВА на 40 тесте.

Я скачал тесты с сайта neerc и пробовал запустить локально. Но во-первых программа выдает Segmentation fault, во-вторых она выпадает в RE только при n=84439 или n=100000. Причем RE дает не алгоритм, а ввод чисел. Ни scanf, ни cin ситуацию не меняют.

2417577 Вот ссылка на решение, всякие процедуры можете не смотреть, валится в main на строчке scanf("%d %d %d",&va, &vb, &vc);

http://ideone.com/b8inBF Тот же код на ideone вместе с тестом + закомментил не важные процедуры.

Если не сложно, может кто-то посмотреть на этот код и сказать в чем ошибка?

P.S. Алгоритм правильный, глючит только ввод, вот подтверждение 2417838. Решение с заглушкой на эти два теста. И тот же код на ideone.

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

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

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

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

судя по всему, на вводе этот код падает, потому что ideone обрезал инпут, вероятно, там есть ограничения на его объём. у меня под MSVS 2010 код 2417577 после увеличения стека на 40 тесте выводит 0 и возвращает 0.

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

    А вот это интересней. Я вообще не понимаю, почему из-за увеличения стека он работает. Т.к. решения на codeforces комплиятся с опцией --stack=268435456

    P.S. добавил строчку #pragma comment(linker, "/STACK:116777216") в программу и заслал под MS C++, но вердикт тот же 2418707. ideone

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

Заметил, что в выводе недовыведена цифра. Решил, что проблема может быть в выводе. о_О

Сократил вывод в 100 раз:
http://diffchecker.com/gOhFXqH8

Слева код падает, справа — не падает.

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

    Как бы вывод я добавлял для того, чтобы понять где именно он валится. (Всякие puts("OK") и т.д.). Вопрос в том, что код без всяких printf ( то есть нормальное решение) вылетает в RE на двух тестах, при определенном значении n. И в то же время на ВСЕХ остальных тестах оно работает. Вот ссылка на код который прошел 49 тестов из 51. http://ideone.com/x7rBTe

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

Может там просто числа как-то криво записаны или какой-нибудь кривой символ в инпуте? Если ты сдал задачу, можно тесты через FTP посмотреть. Попробуй также сдать на Java. Несколько раз уже проскакивала информация, что в ИТМО не пишут валидаторы.

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

    Тесты я скачал с сайта neerc, а т.к. эта задача добавлена в тренировки, то я думаю тесты там те же. На Java переписать не смогу, т.к. просто не знаю язык. И мне ответили ниже, что проблема может быть в самом алгоритме.

    А кстати, как смотреть тесты через FTP? Раньше никогда этим не пользовался.

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

если в приложенной Вами в P.S. заглушке поставить отсечения уже только после ввода и после содержательной части решения, это зайдёт: 2418797. WA 40 вызвано неверным ответом.

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

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

Вместо: ans = ans*1000*1000*100;

Надо: ans = ans*1000*1000*1000;

1 ноль, а столько мороки для всех, извините. И теперь также прояснилась ситуация с тем, почему у меня вылетало на локальной машине( похоже на маленький размер стека).

Еще раз спасибо fdoer , daftcoder, dalex за то, что помогли разобраться в ситуации.