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

    +148

    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
    22. 22
    23. 23
    24. 24
    25. 25
    26. 26
    27. 27
    28. 28
    29. 29
    30. 30
    31. 31
    32. 32
    33. 33
    34. 34
    35. 35
    36. 36
    37. 37
    38. 38
    39. 39
    40. 40
    41. 41
    42. 42
    43. 43
    44. 44
    45. 45
    46. 46
    47. 47
    48. 48
    49. 49
    50. 50
    51. 51
    52. 52
    53. 53
    54. 54
    55. 55
    56. 56
    57. 57
    58. 58
    59. 59
    60. 60
    61. 61
    62. 62
    63. 63
    64. 64
    65. 65
    66. 66
    67. 67
    68. 68
    69. 69
    70. 70
    71. 71
    72. 72
    73. 73
    74. 74
    75. 75
    76. 76
    77. 77
    78. 78
    79. 79
    80. 80
    81. 81
    82. 82
    83. 83
    84. 84
    85. 85
    86. 86
    87. 87
    88. 88
    89. 89
    90. 90
    91. 91
    92. 92
    93. 93
    94. 94
    95. 95
    96. 96
    97. 97
    98. 98
    struct _elem
    {
        int x, y, z, num;
        bool r;
        long long square;
        void read(int i)
        {
            cin >> x >> y >> z;
            num = i;
            square = 0;
        }
    
        friend bool operator<(_elem a, _elem b)
        {
            if ( a.z == b.z)
            {
                return a.r == true;
            }
            else
            {
                return a.z < b.z;
            }
        }
    };
    
    _elem mas[500000];
    bool vis[500000];
    int main()
    {
        int N, W, L;
        cin >> N >> W >> L;
    
        for ( int i = 0; i < N; i++)
        {
            mas[i].read(i);
            mas[i].r = false;
            mas[i + N].read(i);
            mas[i + N].r = true;
            mas[i].square = mas[i + N].square = abs(mas[i].x - mas[i + N].x) * abs(mas[i].y - mas[i + N].y);
            vis[i] = vis[i + N] = false;
        }
    
        sort(mas, mas + 2 * N);
    
        long long square = 0;
        int count = 0;
        int min = -1;
        for ( int i = 0; i < 2 * N; i++)
        {
            if ( mas[i].r == false)
            {
                square += mas[i].square;
                count++;
            }
            else
            {
                square -= mas[i].square;
                count--;
            }
            if ( square == W * L)
            {
                if (min == -1 || count < min)
                {
                    min = count;
                }
            }
        }
       
        if ( min == -1)
        {
            cout << "NO" << endl;
        }
        else
        {
            cout << "YES" << endl;
            count = 0;
            square = 0;
            int i = 0;
            while (count != min || square != W * L)
            {
                if ( mas[i].r == false)
                {
                    square += mas[i].square;
                    count++;
                    vis[mas[i].num] = true;
                }
                else
                {
                    square -= mas[i].square;
                    count--;
                    vis[mas[i].num] = false;
                }
                i++;
            }
            cout << min << endl;
            }
         }
    }

    Запостил: hromjo, 28 Августа 2010

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

    • похоже проходит негласный конкурс на самое неестественное говно. откуда это?
      Ответить
    • где говно?

      для лабы все очень даже прилично написано. кто-то даже догадался ввод редиректом из файла зачитывать.
      Ответить
      • >где говно?
        Строки 17,26,27,50,81 ... это если не углубляться в суть.
        Ответить
        • №17: для наглядности. вместе с №21 выглядит ОК.

          №26, 27: стандартная математическая нотация. ну если какие мат статьи читал, то там народ всегда для простоты и наглядности пользуется массивами.

          №50, 81. таже самая наглядность и читабельность.

          те массивы в строках 26/27 были бы говном, если бы это был продакшн код - а не открыто реализация алгоритма для исследовательской статьи.

          и имена переменных - ну реально из какой-то публикации алгоритма.
          Ответить
          • 17 и 21 - маргинально сойдут, типа автору симметричные операторы понравились
            26,27 - нормально, по условию задачи (хотя константу надо бы)
            50,81 - почему бы для наглядности еще раз на истину нет проверить? говно же

            > не открыто реализация алгоритма для исследовательской статьи
            шо?

            > имена переменных - ну реально из какой-то публикации
            массив mas элементов _elem иллюстрирует паттерн "я не могу придумать имя" и больше ничего

            слишком слабо для публикации, это - лаба
            Ответить
        • Абсолютно нормальный код лабораторной работы. Может идейно в алгоритмах что-то не так, но код вполне сойдет.
          Ответить
      • на хуя лабы на говнокоде постить? студ лабы априори говнокод

        говно везде:
        строка 3 (для краткости буду далее писать С): зачем хранить x,y,z если они нужны только для вычисления квадрата разницы?

        С4: если <r> - это индикатор знака, то и сделай знак:
        int sign;
        который будет равен либо 1, либо -1. иначе предсказатель переходов начнет срать кирпичами

        С6: почему бы из read() не сделать конструктор? видимо не дошли еще по школьной программе

        С13: на хера operator<() если он нигде не используется?

        С26,27: лютое, едкое говно. а ну да я забыл STL в школьной программе нет

        С33: получается, что в <mas> любые значения хранятся дважды, но с разным знаком. хитро

        С50, 81: говнецо такое добротное

        я вообще не понял смыслa массива <vis>
        Ответить
        • бля править свои постя нельзя!?

          по поводу С13: operator<() таки нужен. sort() не приметил сразу. тем не менее передача <_elem> по значению делает этот код говнецом
          Ответить
        • Ну тубе до будущего говнокодера не далеко. Бо если уж серьёзно подходить, то у кода есть 2 основные проблемы: (1) отсутствие комментарием и (2) ущербные названия переменных.

          То что ты перечисляешь, это мелочи за 15 минут фиксуемые. А вот блин плохо продукоментированиый код нередко становится занозой в жопе когда его нужно исправить/усовершенствовать, но никто вспомнить/понять что/как он делает не может.
          Ответить
          • Этот код очень похож на тот, что мне часто приходится писать на соревнованиях. Никакой речи о комментариях и правильных названиях переменных речи быть не может, программа пишется на скорость. Об усовершенствовании или пересмотре такого кода тоже никто не говорит.

            Если кому-то интересно - могу пару сотен примерно таких же исходников выкинуть. :)
            Ответить
            • >пару сотен примерно таких же исходников выкинуть
              вот выкинуть их только и можно
              Ответить
              • Никто же и не спорит, дальнейшее применение такого кода - нулевое. Разве что стандартные алгоритмы относительно нормально выглядят.
                Ответить
        • > который будет равен либо 1, либо -1. иначе предсказатель переходов начнет срать кирпичами

          подробнее плз, или ссылку где почитать, а то я че-то не в теме...
          Ответить

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