Кресты / Говнокод #4118 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  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 hromjo, (Updated )

Комментарии (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. иначе предсказатель переходов начнет срать кирпичами

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

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

Семь раз отмерь — один отрежь, guest!

    А не использовать ли нам bbcode?


    8