1. Главная
  2. Библиотека
  3. Программирование
  4. Напиши на c++ используя дискретное преобразование Фурье...
Решение задачи на тему

Напиши на c++ используя дискретное преобразование Фурье: Двое дуэлянтов решили выбрать в качестве места проведения поединка тёмную аллею. Вдоль этой аллеи растёт n деревьев и кустов. Расстояние между соседними объектами равно одному метру. Дуэль решили

  • Программирование
  • #Основы алгоритмизации и программирования
  • #Структуры и алгоритмы обработки данных
Напиши на c++ используя дискретное преобразование Фурье: Двое дуэлянтов решили выбрать в качестве места проведения поединка тёмную аллею. Вдоль этой аллеи растёт n деревьев и кустов. Расстояние между соседними объектами равно одному метру. Дуэль решили

Условие:

Напиши на c++ используя дискретное преобразование Фурье: Двое дуэлянтов решили выбрать в качестве места проведения поединка тёмную аллею. Вдоль этой аллеи растёт n деревьев и кустов. Расстояние между соседними объектами равно одному метру. Дуэль решили проводить по следующим правилам. Некоторое дерево выбирается в качестве стартовой точки. Затем два дерева, находящихся на одинаковом расстоянии от исходного, отмечаются как места для стрельбы. Дуэлянты начинают движение от стартовой точки в противоположных направлениях. Когда соперники достигают отмеченных деревьев, они разворачиваются и начинают стрелять друг в друга.
Дана схема расположения деревьев вдоль аллеи. Требуется определить количество способов выбрать стартовую точку и места для стрельбы согласно правилам дуэли.
Формат входных данных
Задана одна строка, состоящая из символов «0» и «1» - схема аллеи. Деревья обозначаются символом «1», а кусты - символом «0». Длина строки не превосходит 100000 символов.
Формат выходных данных
Выведите количество способов выбрать стартовую точку и места для
стрельбы согласно правилам дуэли.
Пример:
Стандартный ввод:
101010101
Вывод:
4
Ввод:
101001
Вывод:
0

Решение:

Для решения задачи с использованием дискретного преобразования Фурье (ДПФ) мы можем воспользоваться свойствами симметрии и периодичности. Однако, в данном случае, задача может быть решена более простым способом, без необходимости использования ДПФ. Мы можем просто пройтись по строке и подсчитать количество возможных стартовых точек и мест для стрельбы.

Вот шаги, которые мы будем выполнять:

  1. Прочитаем входную строку, представляющую собой схему аллеи.
  2. Найдем все позиции деревьев (символы 1) и сохраним их в вектор.
  3. Для каждой пары деревьев, находящихся на одинаковом расстоянии от старто...

Теперь давайте объясним, как работает этот код:

  1. Мы считываем строку, представляющую аллею.
  2. Затем мы проходим по строке и сохраняем индексы всех деревьев (символов 1) в вектор .
  3. Далее, мы перебираем все пары деревьев. Для каждой пары деревьев и мы вычисляем расстояние между ними.
  4. Мы проверяем, существует ли дерево на расстоянии влево от и дерево на расстоянии вправо от .
  5. Если оба условия выполняются, мы увеличиваем счетчик .
  6. В конце мы выводим количество способов выбрать стартовую точку и места для стрельбы.

Таким образом, мы получаем решение задачи.

Выбери предмет