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

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
vector<int> res;
...
for (int i = 0; i < res.size(); i++) {
    printf("%d%c", res[i], " \n"[i + 1 == res.size()]);
}

Решил вспомнить как олимпиадные задачки решать.

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

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

  • Олимпиадные задачи принято решать как в 1999-м году?
    " \n"[i + 1 == res.size()]
    Ответить
    • > Олимпиадные задачи принято решать как в 1999-м году?

      А что не так? Напиши лучше.
      Ответить
      • я еблан, и не сразу понял в чем фишка
        >" \n"[i + 1 == res.size()]
        для последнего там будет \n, для остальных пробел

        тогда беру свой высер обратно


        я бы написал
        //
        	for(auto i: res)
        	{
        		std::cout << i << ' ';
        	}
        	std::cout << '\n';

        но это не спортивно, и я для пустого обосрется
        Ответить
        • Недостаточно модерново.
          std::copy(res.cbegin(), res.cend(),  std::experimental::make_ostream_joiner(std::cout, " "));
          std::cout << '\n';
          Ответить
            • library fundamentals TS v2 вроде для С++17. Ничего требующего более позднюю без натягивания совы на глобус не нашёл.
              Ответить
              • Хотя погоди! Есть же ranges! Они с С++20!
                std::ranges::copy(res,  std::experimental::make_ostream_joiner(std::cout, " "));
                std::cout << '\n';
                Ответить
          • угу:/

            не, твой вариант классный, мне следовало подумать более семи секунд, прежде чем его комментировать)
            Ответить
              • 7/8 олимпиады собираешь буст из исходников, затем вызываешь boost::solve_all_problems() и течёшь.
                Ответить
              • ну ладно, хотя бы итераторы тогда
                for (auto i = res.cbegin(); i != res.end(); ++i)
                	{
                		std::cout << *i << " \n"[(i + 1 == res.end())];
                	}
                Ответить
    • А почему бы и нет? Сначала сложение, потом сравнение, потом bool приводится к 0 или 1, что является валидным индексом. Строковый литерал, это char[x], так что всё нормально.
      Ответить
  • Помню задачи были.
    1) написать быстрый аглоритм возведения в степень
    2) написать алгоритм подсчета кол-ва островов на карте
    3) найти кратчайший путь (что бы не было n*n перебора)
    4) в ряде чисел найти отрезок чисел с наибольшей суммой
    Ответить
    • > написать быстрый аглоритм возведения в степень
      но зачем? возвездение же сводится к двум трансцендентным и умножению и всё
      выиграть пару тиков можно только если сильно ужать условия
      Ответить
        • но ведь буртить степень умножениями можно только для целых неотрицательных покпоказателей, а нативные питухи всегда О(1)
          Ответить
    • > написать быстрый аглоритм возведения в степень

      Какая-то ма-те-ма-ти-ка.

      > написать алгоритм подсчета кол-ва островов на карте

      Хочу точный размер в квадратных километрах, до которого камень в море будет «островом», а после – «материком».

      > найти кратчайший путь (что бы не было n*n перебора)

      Хорошая задачка на алгоритм Дейкстры, либо на поиск в ширину.

      > в ряде чисел найти отрезок чисел с наибольшей суммой

      Там бывают отрицательные числа? Если нет, то ответ – сам этот ряд. Если бывают, то пиздец!

      Мой вывод: олимпиада на 5 или 6 /10.
      Ответить
      • > Хочу точный размер в квадратных километрах, до которого камень в море будет «островом», а после – «материком».
        Там, небось, либо на карте ничего кроме островов нет, либо материки касаются границы карты.

        > Там бывают отрицательные числа? Если нет, то ответ – сам этот ряд. Если бывают, то пиздец!
        Да, в принципе, ничего сложного. Насколько я понимаю, главная проблема — заставить это работать не за N².
        Ответить

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

Где здесь C++, guest?!

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


    8