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

    +156

    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
    // #include<....>
    
    using namespace std;
    
    #if ( _WIN32 || __WIN32__ || _WIN64 || __WIN64__ )
    #define I64 "%I64d"
    #else
    #define I64 "%Ld"
    #endif
    
    #define PB(x) push_back(x)
    #define MP(x,y) make_pair(x,y)
    #define dbg(x) cerr << #x << " = " << x << endl
    #define fori(i,b,e) for(int i = (b); i < (e); i++)
    #define forall(p,s) for(typeof((s).begin()) p = (s).begin(); p != (s).end(); p++)
    #define memclr(a) memset((a), 0, sizeof(a))
    
    typedef long long int64;
    const long long inf = ((long long)1 << 63) - 1;
    
    #define PROBLEM_NAME "a"
    
    #define add(i, j, val, p, ch) \
    do { \
    	par[i][j][val] = p; \
    	c[i][j][val] = ch; \
    	was[i][j][val] = true; \
    	d[i][j][val] = d[i][j][p] + 1; \
    	a[i][j][sz[i][j]++] = val; \
    } while (0)
    
    void bfs(int n) {
    	int p[10][10][2];
    	for (int i = 0; i < 10; i++) {
    		for (int j = 0; j < 10; j++) {
    			p[i][j][0] = min(i,j);
    			p[i][j][1] = max(i,j);
    		}
    	}
    	static int par[10][10][2 << 16];
    	static int c[10][10][2 << 16];
    	static bool was[10][10][2 << 16];
    	static int a[10][10][2 << 16];
    	static int d[10][10][2 << 16];
    	static int sz[10][10];
    	static int cur[10][10];
    
            //...
    }
    int main() {
            //...
    }

    Часть шаблона, ну еще кое-какие макросы, т.к. влом было писать нормально. Зато работало. bfs не обыкновенный, если кого это смутит.

    Запостил: baton, 27 Октября 2010

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

    • Что тут скажешь ... проблема А :)
      Ответить
      • На самом деле, проблема d, и входные файлы более развернуто называются. Просто не хотелось клеймить очень и очень хорошую задачу.
        Ответить
        • >На самом деле, проблема d
          т.е. в оригинале написано #define PROBLEM_NAME "d" ? :))
          Ответить
          • =) Не, там шестисимвольное имя было. Просто на эту задачу я убил часов 10 своей жизни, она мне стала почти как родная, так что не хочется, чтобы ее имя фигурировало здесь.)
            Ответить
            • правильно. а то вдруг сглазят ... или порчу наведут ))
              Ответить
            • по горизонтали:
              42. алгоритмическая задача, решаемая обходом дерева в ширину (6 букв)
              Ответить
              • пиздец?
                Ответить
              • в каком номере ответ будет ? :)
                Ответить
                • Да я че-то как-то глупо ломаюсь. В этом номере.
                  Дано натуральное число n, не превосходящее 2^16.
                  Найти число, кратное n и состоящее из минимального количества различных цифр. Среди всех таких вывести минимальное.
                  Для 16 ответ 16. Для 513 ответ - 333..33 (всего 18 троек).

                  К слову, там не дерево.
                  Ответить
    • > typedef long long int64;

      а шо под виндами stdint.h нету?

      > const long long inf = ((long long)1 << 63) - 1;

      и это как бы правильнее было бы ((1ll << 63) - 1) писать.

      но и все остальное попахивает...
      Ответить
    • d[i][j][val] = d[i][j][p] + 1; \
      a[i][j][sz[i][j]++] = val; \ .......
      да, мьсе знает толк.....
      Ответить
    • как-то уж чересчур это извращённо, имхо
      Ответить
      • ... подумал Кэп, почёсывая затылок...
        Ответить
      • Разумеется, после беглого просмотра стало ясно, что можно сделать его менее извратным, не теряя при этом легкости дебага (ну там глобальные массивы, отдельная функция, ля-ля-ля).
        Можно было вообще писать тупо код вместо макросов, но тогда пришлось бы наслаждаться слежкой за тремя разными участками и наслаждаться.
        В конце концов, можно передавать массивы в качестве параметров, но, блин, писать много, а ситуация была не та, когда бьют за быдлокод.
        "Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь?... запостите его..."
        Несмотря на все вышесказанное код был. Оставалась самая малость.
        Ответить

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