1. C++ / Говнокод #16739

    +54

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    #include <iostream>
    #include <cstdio>
    #include <cstdlib>
    using namespace std;
     
    int main()
    {
        freopen("input.txt", "r", stdin);
        freopen("output.txt", "w", stdout);
        long x1, x2, x3;
        cin >> x1 >> x2 >> x3;
        if(x1 == 0 && x2 == 0 && x3 == 0){
            cout << 0 << endl;
            exit(EXIT_SUCCESS);
        }
        (x1 != 0) ? cout << x1 : cout << "";
        (x2 != 0) ? (x2 > 0 && x1 != 0) ? (x2 == 1) ? cout << "+x" : cout << '+' << x2 << 'x' : (x2 == -1) ? cout << "-x" : (x2 == 1) ? cout << 'x' : (x2 == -1) ? cout << "-x" : cout << x2 << 'x' : cout << "";
        (x3 != 0) ? (x3 == 1) ? cout << 'y' : (x3 == -1) ? cout << "-y" : (x2 == 0 && x1 == 0) ? cout << x3 << 'y' :  (x3 > 0) ? (x3 == 1) ? cout << "+y" : cout << '+' << x3 << 'y' : (x3 == -1) ? cout << "-y" : cout << x3 << 'y' : cout << "";
        cout << endl;
        return 0;
    }

    Задача № 277 на acmp.ru. Решил "не писать много кода"

    Запостил: jyree, 21 Сентября 2014

    Комментарии (45) RSS

    • Лабы нинужны.

      [зануда-mode]
      - using namespace.
      - Какого хрена переменные называются x1, x2 и x3, если в условии они a, b, c?
      [/зануда-mode]
      Ответить
      • > using namespace
        Ну да, конечно, в коде на три с половиной строчки, зачем нам определять пространство имён? Лучше, конечно, потрхацца с std:: перед каждой перменной.
        Ответить
        • > зачем нам определять пространство имён
          Чтоб плохому не учился. А то в коде на три с половиной строчки привыкнут писать using namespace std, а потом в нормальной проге по-инерции эту срань продолжают юзать. Да еще и в header'ах.
          Ответить
    • Значит я, старый и больной человек, должен идти на acmp.ru а потом искать там задачу 277?

      <<Спустя 2 минуты и тонны недовольства>>

      Ну ебать, задача века. Ты нахуя суда пришел вообще? Это не смешно - это страшно. Вы самое слабое звено - прощайте
      Ответить
      • > суда
        Прошу всех встать, суд идёт!

        > Вы самое слабое звено - прощайте
        Зря ты так. Себя в школе вспомни.
        Ответить
        • Я в детстве по форумам не бегал, нацист грамматический.
          Ответить
          • Из за таких вот вредных личностей молодёжь курит, чтобы выглядеть взрослее. А ещё из-за этого маленькие девочки-школьницы красятся, чтобы выглядеть на тридцатник и совращают таких вот вредных личностей.
            Ответить
            • я не курю. и не люблю школьниц.

              хотя я вру, да
              Ответить
              • Жаль.
                Если бы было "я курю. люблю школьниц", можно было бы спетросянить в ответ...

                Забыл прокомментировать
                (x1 != 0) ? cout << x1 : cout << "";

                Красиво. Ещё бы скобки убрать. Хотел плюсануть, да нет кармы на этом сайте.
                Интересно исправляется проблема строгой типизации, надо запомнить хак.
                Ответить
                • А если бы я написал "я куру люблю, школьниц" вы бы захлебнулись от счастья
                  Ответить
    • http://acmp.ru/index.asp?main=task&id_task=277
      Я, старый и больной человек, спустя джва часа и тонны недовольства публикую наконец ссылку, чтобы её более никто не искал.

      А задача хорошо, годно составлена. Начинаешь читать, думаешь "ой, надо учесть то и это", а потом видишь в конце подробное ТЗ и радуешься.
      Ответить
      • ага.
        http://www.youtube.com/watch?v=xOrgLj9lOwk
        Ответить
      • > в конце подробное ТЗ
        Да еще и юнит-тесты в режиме чёрного ящика есть.
        Ответить
        • там покрытия не хватает до полноценного черного ящика
          Ответить
          • Да вроде обычно на олимпиадах неплохое покрытие было...
            Ответить
            • я про данную задачу. а так на задачах олимпиадных всегда хорошие черные ящики. Иначе конкурсанты начнут возмущаться - "я не понял задачу, АМ/КГ"
              Ответить
              • А что в покрытии этой задачи не так? Ты написал кривой код, который прошел тесты?
                Ответить
                • Ничего. все норм. Я говорю черный ящик плохой. Но для данной задачи норм.
                  Ответить
                  • > Я говорю черный ящик плохой.
                    Хм, а как ты его с сервера упёр, чтобы рассмотреть?
                    Ответить
                    • Ты взрослый мальчик, понимаешь о чем я. Хватит, у меня и так сегодня 5 пар.
                      Ответить
                      • Не понимаю. Ты о тех двух примерах, что написаны под задачей? Или о полноценном наборе тестов, который сервер никому не даёт?
                        Ответить
                        • есно про те что даны под задачей.
                          Ответить
                          • Дык это не тесты, а так, примерчики, чтобы примерное представление о входной/выходной инфе получить. А настоящий test suite сервак хранит как государственную тайну :)
                            Ответить
                            • а примерчики - не тесты?

                              Сейчас подеремся
                              Ответить
                              • Тесты. Скорее всего 2 первых теста в наборе - это именно они.
                                Ответить
    • Кстати, задачка про ГК.
      Сколько раз нужно было обновить страничку, чтобы написать все комментарии к посту?
      Дано: пост и дерево комментариев, для каждого комментария известен его создатель и дата создания.

      Примеры:
      xxx: xxxx!
      yyy: yyyy!
      // 2 раза
      
      xxx: xxxx!
        xxx: yyyy!
      xxx: zzz.
      // 1 раз
      
      xxx: xxx!
        yyy: yyyy!
          xxx: да.
      // 3 раза
      
      xxx, 10:00: xxx
        yyy, 10:01: y
          xxx, 10:02: z
      xxx, 10:05: !!!!
        yyy, 10:06: c
          xxx, 10:07: d.
      // 5 раз
      
      xxx, 10:00: xxx
        yyy, 10:02: y
          xxx, 10:04: z
      xxx, 10:01: !!!!
        yyy, 10:03: c
          xxx, 10:05: d.
      // 3 раза
      Ответить
      • чет я не понял задачу. точнее ответы
        Ответить
        • Задача о нижней оценке.
          Чтобы ответить на пост, страницу надо обновить. Чтобы ответить на комментарий, которого нет на странице, страницу надо обновить. Отвечать можно на всё, что видишь, не обновляя.

          Пример 1: если пост прокомментировало N пользователей, каждый из них обновит страницу не менее 1 раза
          Пример 2: чтобы ответить на свой новый комментарий, не надо перезагружать страницу; если обновить страницу, можно оставить сколько угодно комментариев к тому, что загрузилось.
          Пример 3: чтобы ответить на комментарий, его надо прочитать. В примере было 2 пользователя, т.е. минимум 2 обновления страницы. xxx должен прочитать комментарий yyy, чтобы обновить его => лишнее обновление.
          Примеры 4 и 5: суперпозиция примеров 2 и 3. Казалось бы (спасибо примеру 3), иерархия комментариев определяет количество обновлений (пример 4), но если писать по 2 комментария за раз, то же дерево комментариев строится за меньшее количество обновлений (пример 5).
          Ответить
          • xxx: xxx!
            yyy: yyyy!
            xxx: да.
            // 3 раза

            ну 2 же раза
            Ответить
            • xxx: xxx!
              yyy: yyyy!
              xxx: да.

              Так два раза. xxx пришёл, обновил, написал; yyy пришёл, обновил, написал, пока xxx долго писал свои комментарии; xxx написал.

              xxx: xxx!
                yyy: yyyy!
                  xxx: да.

              А так три. xxx пришёл, обновил, написал; yyy пришёл, обновил, увидел сообщение xxx написал в ответ; xxx обновил, увидел сообщение yyy, написал в ответ.
              Если есть алгоритм проще, который даёт два раза - в студию его.
              Ответить
              • не понимаю зачем ты первый раз обновляешь
                Ответить
                • Образное выражение для универсальности, чтобы объединить понятие "первая загрузка" и "обновление". Можно употребить термин "Загрузка страницы http://govnokod.ru/<число> без кэширования".

                  P.S. Впрочем, можно эти понятия разделить и решить каждую из двух получившихся задач.
                  Ответить
                  • length.group.sortBy getTime
                    Ответить
                    • Но оно не различит
                      xxx, 10:00: ...
                      yyy, 10:01: ...
                      xxx, 10:02: ...
                      и
                      xxx, 10:00: ...
                        yyy, 10:01: ...
                          xxx, 10:02: ...

                      а если различит, то весь сок в group, надо описать его строение.
                      Ответить
                      • поняяяял

                        нужно перед этим удалить ответы одного юзера с одним родительским узлом кроме первого.
                        Ответить
                        • Звучит интересно. (Если что, я алгоритма не знаю. Задача предложена для развлечения читателей.)
                          Ответить
              • > Если есть алгоритм проще, который даёт два раза - в студию его.
                Отправка формы на нужную страницу даёт ноль раз:
                for(id = 0; id < ∞; ++id)
                  HTTP(ответитьНаКомментарий(id, "Автор - х_й!"));
                Ответить
      • В задаче нужно указывать для кого из участников нужно вычислить это самое значение. Если я первый раз обновил страницу после того, как все предыдущие комментарии были сделаны, и мой был последним - это не то же самое, если кто-то до этого комментировал и обновлял по кругу.
        Ответить
        • Я подразумевал нижнюю оценку загрузок страницы для всех комментировавших.
          Ответить
        • > для всех комментировавших
          суммарное число загрузок
          Ответить
      • Вроде бы решение: http://ideone.com/m1l3Zs (даже джва)

        Алгоритм 1 (ops: O(Ncomm * (log(Ncomm) + log(Nusers) * (log(Ncomm) | 1 в зависимости от нумерации))), mem: O(Nusers)):
        0. Число обновлений (ЧО) устанавливаем в ноль.
        1. Сортируем список комментариев по времени добавления (или ID комментария)
        2. Для каждого пользователя устанавливаем последний просмотренный комментарий пользователя (ППКП) в ноль (ID комментариев начинаются с 1)
        2. Для каждого комментария (в хронологическом порядке):
        2.1. Если ППКП == 0, то этот пользователь открыл страницу в первый раз => ЧО := ЧО + 1, ППКП := ID текущего комментария.
        2.2. Если у комментария есть комментарий родитель, который написал другой пользователь, причём его ID больше ППКП, то ЧО := ЧО + 1, ППКП := ID текущего комментария.
        3. Возвращаем ЧО.

        При недостатке памяти (ops: O(Ncomm * (log(Ncomm) + Nusers * (log(Ncomm) | 1 в зависимости от нумерации))), mem: O(1)):
        0. ЧО := 0
        1. Сортируем список комментариев по времени добавления (или ID комментария)
        2. Определяем диапазон ID пользователей
        3. Для каждого ID пользователя (ПИД)
        3.1. Заводим переменную ППКП := 0
        3.2. Для каждого комментария
        3.2.1. Если его написал ПИД,
        3.2.1.1. Если ППКП == 0, то этот пользователь открыл страницу в первый раз => ЧО := ЧО + 1, ППКП := ID текущего комментария.
        3.2.1.2. Если у комментария есть комментарий родитель, который написал другой пользователь, причём его ID больше ППКП, то ЧО := ЧО + 1, ППКП := ID текущего комментария.
        4. Возвращаем ЧО.
        Ответить
        • Если что, девятый тестовый пример списан с поста 3151, но правильно посчитать в уме, сколько раз достаточно обновить страницу, чтобы написать 700+ комментариев, я не смог, извините.
          Ответить
          • Че я не понял структуру данных. Давай просто список (Time, UserId, ParentID(0 если отец - сам пост)) без всяких наворотов
            Ответить
            • В общем, там всё так, только вместо времени там ID комментария (он уникален и течёт в ногу со временем) и Maybe ID вместо ID|0.

              http://ideone.com/e5xBHk - без монад.
              Если что можно, убрать .filter... в строчке 57 - для включения реального примера, ответ на который неизвестен.
              Ответить

    Добавить комментарий