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

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

Решая задачу 38B столкнулся с неожиданной проблемой. Написал следующее решение: http://pastebin.com/bm1fR9Qw. Там в 29 строке взят в комментарий cout. Если убрать комментарий, то на тест:

a1
b3
выдает:
0 0 1 2
0
Если же комментарий оставить, то вывод просто 44)  Почему с cout следующее после него условие выполняется, а без него нет?? Запускаю на codeblocks в ubuntu 9.10.
  • Проголосовать: нравится
  • +1
  • Проголосовать: не нравится

13 лет назад, # |
Rev. 3   Проголосовать: нравится -14 Проголосовать: не нравится

наверно оффтоп, но каков смысл этого дефайна:
#define y1 Y1 ?
  • 13 лет назад, # ^ |
    Rev. 4   Проголосовать: нравится +1 Проголосовать: не нравится

    на идеоне все работает нормально и с выводом и без -- http://ideone.com/3jxLP
    Сейчас проверим на кодфорсах. Автор, Вы случаем ничего не меняли до того как выложить на pastebin код ?

    UPD.  На кодфорсах получается как раз как говорит автор, и дефайны предложенные Alex_KPR не помогли
  • 13 лет назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится
    Помню какой-то компилятор C++ не давал создавать переменную с именем y1, но не помню какой.
  • 13 лет назад, # ^ |
    Rev. 2   Проголосовать: нравится +16 Проголосовать: не нравится

    очень важный дефайн на самом деле

    NNSU меня научили делать примерно так:
    #define y1 osrughosduvgarligybakrybrogvba
    #define y0 aosfigdalrowgyalsouvgrlvygalri

    дело в том, что в cmath есть стандартные функции с названиями y0 и y1, которые никомулюбому олимпиаднику нафиг не нужны, а иногда очень удобно завести переменные x0, y0, x1, y1 для описания пары точек внутри программы
    • 13 лет назад, # ^ |
      Rev. 5   Проголосовать: нравится 0 Проголосовать: не нравится

      в данном случае вроде math не подключен, ну да ладно :)

      кстати, я помню интересный случай, связанный с этими дурацкими переменными:)

      это было на отборе на ВКОШП прошлого года. мы написали код к одной задаче, использовав там переменные x и y. было что-то типа ВА17. через полчаса проталкиваний и переписываний частей кода получилось подобрать тест, на котором код выдавал ВА. далее выяснилось, что переменная x меняется сама в куске кода, в которой ее даже нет!
      написали перед этим куском x1=x; y1=y; и дальше использовали в коде эти переменные. получили Accepted.
      до сих пор не осознали, почему так произошло О_о
      P.S. math.h был подключен

      • 13 лет назад, # ^ |
          Проголосовать: нравится 0 Проголосовать: не нравится
        Может выход за рамки массивов где-то происходил и использовалась память рядом с этими переменными?
        • 13 лет назад, # ^ |
            Проголосовать: нравится 0 Проголосовать: не нравится
          хм, да вроде бы не было такого...
          хотя я уже не слишком помню, что там было понаписано, может и массивы были малы, но вряд ли конечно.
  • 13 лет назад, # ^ |
    Rev. 2   Проголосовать: нравится 0 Проголосовать: не нравится

    По поводу y1:
    Почему не компилится етот код ? [visual studio 2008]
13 лет назад, # |
Rev. 3   Проголосовать: нравится 0 Проголосовать: не нравится

У меня на g++ пишет 44.


P.S. Мой g++ версии 4.4.5, а на запуске Codeforces с 4.6 происходит то, что описывает автор.
13 лет назад, # |
Rev. 4   Проголосовать: нравится 0 Проголосовать: не нравится

С приветом нормально работает :)

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

приколист =)

обрати внимание на эту строку: const int dx[]={-2,-2,-1,1,2,2,1-1};


P.S. да, и минус автору за кривые _______ (нужное вписать)
13 лет назад, # |
Rev. 2   Проголосовать: нравится 0 Проголосовать: не нравится

gcc 4.6.0-6 на x86 Linux, с оптимизациями работает нормально, без - выводит 0 вместо 44
Пиши в багзилу :)
Под вижуал c++ результат такой же, хм
13 лет назад, # |
  Проголосовать: нравится +2 Проголосовать: не нравится
Так неужели вся проблема кроется в том, что я к несуществующему элементу обращаюсь? Теперь заработало все, когда исправил. Всем спасибо, сам бы, наверное, ни за что бы ни нашел косяк)
  • 13 лет назад, # ^ |
      Проголосовать: нравится +1 Проголосовать: не нравится

    Да, в таких случаях самое нехорошее, что даже чёткое задание размеров массивов не поможет. Пока лично с проблемой не сталкивался, но всё больше понимаю Егора Куликова.

13 лет назад, # |
  Проголосовать: нравится +8 Проголосовать: не нравится
Вспомнился похожий случай с какой-то командной. Написали решение, а оно не работает. Начали дебажить, а output debug почему-то ничего не выводил. Уже что-то только не делали, и все cout на printf заменили. Потом выяснилось, что и cin ничего не пытается считать. А писали тогда в MinGW, и оказалось, что cpp файл к проекту не подключили... В общем, всем спасибо, что помогли разобраться.