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

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
#include <cstdio>
#include <cstring>

int main() {
    unsigned long long int a[100000];
    unsigned long long int N;
    unsigned long long int max,max1;
    unsigned long long int maxC,maxC1;
    unsigned long long int maxN[100000];
    unsigned long long int ans = 0;
    unsigned long long int ans1 = 0;
    max = max1 = maxC = maxC1 = 0;
    scanf("%llu",&N);
    for (unsigned long long int i = 0; i < N; ++i) {
        scanf("%llu",a + i);
        if (a[i] > a[max]) {
            max1 = max;
            maxC1 = maxC;
//            memcpy(maxN,maxN1,maxC*sizeof(unsigned long long int));
            max = i;
            maxC = 1;
            maxN[0] = max;
        } else if (a[i] == a[max]) {
            maxN[maxC++] = i;
        } else if (a[i] > a[max1]) {
            max1 = i;
            maxC1 = 1;
        } else if (a[i] == a[max1]) {
            maxC1++;
        }
    }
    if (maxC == 1) {
        ans = a[max];
        if (a[max] == a[max1] + 1) {
            if (a[max] < (maxC1 + 1) * a[max1]) {
                printf("%llu\n",a[max]);
                return 0;
            }
        }
        if (max > 0) {
            if (a[max - 1] + 1 < ans - 1) {
                if (a[max - 1] + 1 == a[max1]) {
                    if (a[max1] * (maxC1 + 1 + (a[max] - 1 == a[max1]?1:0)) < ans) {
                        ans1 = a[max1] * (maxC1 + 1 + (a[max] - 1 == a[max1]?1:0));
                        if (ans > ans1) ans = ans1;
//                        prunsigned long long intf ("1 : %d\n",ans);
                    }
                }
                else { 
                    ans1 = a[max] - 1 + (a[max] - 1 == a[max1]?a[max1] * maxC1:0);
                    if (ans > ans1) ans = ans1;
//                    prunsigned long long intf ("2 : %d\n",ans);
                }
            }
        }
        if (max < N - 2) {
            if (a[max + 1] + 1 < ans - 1) {
                if (a[max + 1] + 1 == a[max1]) {
                    if (a[max1] * (maxC1 + 1 + (a[max] - 1 == a[max1]?1:0)) < ans) {
                        ans1 = a[max1] * (maxC1 + 1 + (a[max] - 1 == a[max1]?1:0));
                        if (ans > ans1) ans = ans1;
//                        prunsigned long long intf ("3 : %d\n",ans);
                    }
                }
                else { 
                    ans1 = a[max] - 1 + (a[max] - 1 == a[max1]?a[max1] * maxC1:0);
                    if (ans > ans1) ans = ans1;
//                    prunsigned long long intf ("4 : %d\n",ans);
                }
            }
        }
        printf("%llu\n",ans);
        return 0;
    } // one max line
    bool f = true;
    bool f1 = true;
    if (a[max] * maxC > a[max] + 1) {
//        prunsigned long long intf("here %d\n",maxC);
        for (unsigned long long int i = 0; i < maxC; ++i) {
            if (f1 && ((maxN[i] && a[maxN[i] - 1]) || (maxN[i] < N - 1 && a[maxN[i] + 1]))) f1 = false; // get from near line
            if (f && ((maxN[i] && a[maxN[i] - 1] < a[max] - 1) || (maxN[i] < N - 1 && a[maxN[i] + 1] < a[max] - 1))) f = false;
        }
    }
    ans1 = ans = maxC * a[max];
    
    if (!f && a[max] > 1) ans = (maxC - 1) * a[max];
    if (!f1) ans1 = a[max] + 1;
    printf("%llu\n",ans>ans1?ans1:ans);
    return 0;
}

Серега говнокодит задачу с OpenCup'a от 15.03.2015 (задача L - Бассейн счастья)

Запостил: kosta3ov kosta3ov, (Updated )

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

  • Этот код божественен!!! посмотрите на отступы и кодстайл: просто глаз не оторвать. явно что человек писавший код великолепно владеет языком
    Ответить
    • автора бы заставить интеграцией и поддержкой этого кода пару лет позаниматся.
      Ответить
  • Ну спасибо, что скинул саму задачу да еще и ссылку на нее! Гори в аду!
    Ответить
    • Это ж та самая задача L, которую Серёга решал, неужели не помнишь уже? Та, про бассейн которая.
      Ответить
          • Ах да, с того самого OpenCup'а.... которых миллионы проходят, потому что каждое обоссаное соревнование называется OpenCup. OpenCup среди уральских уборщиц, OpenCup гинекологов любителей, OpenCup-На-Котором-Тот-Сережа-Которого-Нельзя-Называть-Решал-Задачу-Про-Бассейн...
            Ответить
            • А может, Сережа решал, как стрелять из бассейна в Warface Open Cup?
              Ответить
  • А в unsigned long long long long long long long long int влезает 288 бит?
    Ответить
  • Кстати, что за prunsigned intf?
    Про intf у меня есть версия. f - значит float, то есть intf - целое число с плавающей точкой. Царь джва года ждал этот тип.


    Тьфу, долго думал, что за странное говно. И конструктор какой-то питушарский: число из строки выводится. А иногда - и от двух! Или сигнатура функции? Но где тогда типы аргументов? Даже гуглить начал и кое-что нашёл.

    А потом пришло озарение, я познал prunsigned intf и гордый стиль автора "заменить и закомментировать все сломавшиеся строки".
    Ответить
    • имхо это был printf просто во всем файле int заменили на unsigned long long int и не указали что слово нужно искать целиком. Следовательно здесь закомментировали отладочную печать ибо стереть лень
      Ответить

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

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

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


    8