Блог пользователя CrazzyBeer

Автор CrazzyBeer, история, 9 лет назад, По-английски

Hello everybody!

Is there a predefined data structure in C++ that allows you to insert numbers (maybe even dublicate keys) and effectively count the amount of numbers greater or less than a given value?

Now I'm using a recursive implementation of Red Black Tree — Here in original (Java) and Here translated to C++ with count_greater implemented.

One idea would be using std::lower_bound in std::map and then std::distance from map.begin() to the result iterator.

Полный текст и комментарии »

  • Проголосовать: нравится
  • +9
  • Проголосовать: не нравится

Автор CrazzyBeer, история, 9 лет назад, перевод, По-русски

Даны два треугольника (координаты трех точек) . Координаты не идут в какой-то особой последовательности.

Вопрос Можно ли нарисовать второй треугольник, используя как шаблон первый? При это треугольник не разрешается отрывать от доски, но можно крутить и перемещать.

EX: Вот пример, в котором ответ будет "НЕТ", ибо треугольник нужно сначала оторвать от доски, перевернуть, а потом вернуть на доску.

Сравнивать площадь и углы мало (пример выше тому доказательство), может нужно как-то по-особенному использовать ориентированную площадь?

UPD!!! Решение такое.

  1. Читаем координаты первого треугольника

  2. Вычисляем d1 (расстояние между 1 точкой и 2), d2 ( 2-3 ), d3 (1-3).

  3. Вставляем в вектор эти расстояния (предполагаем, что порядок точек по часовой стрелке)

  4. Вычисляем ориентированную площадь, если она меньше нуля, мы ошиблись, порядок против часовой, так что меняем местами vector[0] и vector[2].

  5. Делаем тоже самое для второго треугольника.

  6. Перебираем все сдвиги первого вектора на равенство со вторым (если находим равенство — ответ "ДА"), если равенство не нашли — "НЕТ".

Полный текст и комментарии »

  • Проголосовать: нравится
  • +3
  • Проголосовать: не нравится

Автор CrazzyBeer, 10 лет назад, По-русски

Здравствуйте. Пришла в голову идея для задачи.

Вася учится в школе. Учителя ставят ему оценки от 1 до 10. Скоро настанет день, когда учителя будут вычислять квартальный балл для каждого ученика. Вся очень принципиальный человек, поэтому он хочет, чтобы его квартальный балл был ровно M. Вася заглянул в журнал и увидел, что у него уже есть N оценок, каждая из которых в диапазоне от 1 до 10. Вася не хочет часто отвечать и получать много оценок, помогите ему понять, сколько раз ему нужно ответить и какие именно оценки получить, чтобы его принцип не был нарушен.

Входные данные: В первом пряду — N и M — количество оценок и нужный ему квартальный балл. Во втором ряду записаны N оценок, от 1 до 10. Выходные данные: В первом ряду — минимальное количество оценок X . Во втором ряду — X оценок, порядок не имеет значения.

Квартальный балл вычисляется таким образом — все оценки суммируются и эта сумма делится на количество оценок. Если ответа нет — выведите -1.

Пример 1. Вход

 5 5
 1 5 9 7 2

Выход

 1
 6

Пример 2. Вход

 3 8
 1 2 3

Выход

 9
 10 10 10 10 10 10 10 10 10

Предлагайте свои методы решения и, что самое важное — предлагайте в каких диапазонах должен быть N, чтобы гарантированно уложиться в 1-3 секунды. В корректности тестов почти уверен

Полный текст и комментарии »

  • Проголосовать: нравится
  • +9
  • Проголосовать: не нравится

Автор CrazzyBeer, 10 лет назад, По-русски

Здравствуйте.

Вопрос такой. Имеется неориентированный граф V. Известно, что из любой вершины графа u можно попасть в любую вершину v.

Важной вершиной называют такую вершину, при удалении которой и всех её рёбер — некоторая вершина u теряет связь с некоторой вершиной v.

Требуется найти количество важных вершин.

В голову сразу лезет поиск в глубину, но он мне, почему-то, кажется слишком громоздким. Есть ли какой-то более легкий метод или алгоритм?

Полный текст и комментарии »

  • Проголосовать: нравится
  • +6
  • Проголосовать: не нравится