Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/8: Рейтинг темы: голосов - 8, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 03.12.2016
Сообщений: 7

задание повышенной сложности

03.12.2016, 18:47. Показов 1778. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
есть мысли как решить этот таск?
Миниатюры
задание повышенной сложности   задание повышенной сложности  
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
03.12.2016, 18:47
Ответы с готовыми решениями:

Задача повышенной сложности
Нужно решить хотя бы одно из заданий ,лучше все и пожалуйста ,если можно,побольше объяснению по кодам

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

задача повышенной сложности
Ребят, можете помочь, над этой задачей уже час сижу, что-то никак не выходит с ней разобраться.

8
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
12935 / 6802 / 1821
Регистрация: 18.10.2014
Сообщений: 17,215
03.12.2016, 18:59
Измерить точное начальное расстояние между берегами (строго по вертикали) вдоль каждой вертикали, проходящей через каждую вершину каждой ломаной. Найти минимум среди полученных расстояний. Найти сколько таких минимумов получилось, не включая в подсчет крайние точки. Количество озер - на одно больше.
0
0 / 0 / 0
Регистрация: 03.12.2016
Сообщений: 7
03.12.2016, 19:11  [ТС]
TheCalligrapher, возникают проблемы с реализацией.

Мой код слишком долго работает (квадратичная сложность)...
Есть возможность приложить пример кода (язык не особо важен)?
0
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
12935 / 6802 / 1821
Регистрация: 18.10.2014
Сообщений: 17,215
03.12.2016, 19:17
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
Найти сколько таких минимумов получилось, не включая в подсчет крайние точки. Количество озер - на одно больше.
Ан нет... Все чуть сложнее. Надо не забывать, что протяженные участки ломаных могут совпасть. В частности, если обе ломаные совпадут по всей длине - то озеро исчезнет вовсе (последний пример).

Цитата Сообщение от namespacelucky Посмотреть сообщение
Есть возможность приложить пример кода (язык не особо важен)?
Кода пока нет, но задача - интересная. Появится время (часа через два, может быть) - попробую.
0
03.12.2016, 20:21
 Комментарий модератора 
namespacelucky, пожалуйста, прочитайте правила форума.
Особое внимание обратите на следующие пункты:
0
Почетный модератор
Эксперт по компьютерным сетямЭксперт Windows
 Аватар для magirus
28049 / 15785 / 983
Регистрация: 15.09.2009
Сообщений: 67,752
Записей в блоге: 78
03.12.2016, 20:33
namespacelucky, условие задачи - руками перепечатываем на форум.
0
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
12935 / 6802 / 1821
Регистрация: 18.10.2014
Сообщений: 17,215
03.12.2016, 22:05
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
#include <cassert>
#include <vector>
#include <algorithm>
#include <iostream>
 
/****************************************************************************************/
 
struct E
{
  const wchar_t *what;
  E(const wchar_t *what) : what(what) {}
};
 
struct EIo : E
{
  EIo(const wchar_t *what) : E(what) {}
};
 
struct EBadData : E
{
  EBadData(const wchar_t *what) : E(what) {}
};
 
/****************************************************************************************/
 
struct Point
{
  int x, y;
};
 
typedef std::vector<Point> Points;
 
Points read_chain(unsigned n)
{
  Points chain(n);
 
  for (auto &p : chain)
    if (!(std::cin >> p.x >> p.y))
      throw EIo(L"Не могу прочитать координаты");
 
  if (!std::is_sorted(chain.begin(), chain.end(), 
         [](const Point &p1, const Point &p2) { return p1.x < p2.x; }))
    throw EBadData(L"Координаты не упорядочены по X");
 
  return chain;
}
 
void read_chains(Points &lo, Points &hi)
{
  int n = 0, m = 0;
  if (!(std::cin >> n >> m))
      throw EIo(L"Не могу прочитать количества вершин в ломаных");
 
  if (n < 2 || m < 2)
    throw EBadData(L"Недопустимые количества вершин в ломаных");
 
  hi = read_chain(n);
  lo = read_chain(m);
 
  assert(!lo.empty() && !hi.empty());
 
  if (lo.front().x != hi.front().x || lo.back().x != hi.back().x)
    throw EBadData(L"Не совпадают концевые X координаты ломаных");
}
 
/****************************************************************************************/
 
const double EPSILON = 0.001;
typedef std::vector<double> Distances; 
 
double vertical_distance(const Point &p, const Point &a, const Point &b)
{ // Знаковое вертикальное расстояние от точки 'p' до отрезка 'ab'. Положительно, если 
  // точка лежит над отрезком, отрицательно - если точка лежит под отрезком
  assert(a.x < b.x);
  assert(p.x >= a.x && p.x <= b.x);
  double y = a.y + (double) (p.x - a.x) * (b.y - a.y) / (b.x - a.x);
  return p.y - y;
}
 
Distances calculate_distances(const Points &lo, const Points &hi)
{ // Вычисляем вертикальное расстояние между ломаными для каждой уникальной X координаты 
  // вершин
  Distances distances;
 
  auto it_lo = lo.begin(), it_hi = hi.begin();
 
  while (it_lo != lo.end())
  {
    assert(it_hi != hi.end());
 
    double distance = 0;
 
    if (it_lo->x < it_hi->x)
    {
      assert(it_hi > hi.begin());
      distance = -vertical_distance(*it_lo, *std::prev(it_hi), *it_hi);
      ++it_lo;
    }
    else if (it_lo->x > it_hi->x)
    {
      assert(it_lo > lo.begin());
      distance = vertical_distance(*it_hi, *std::prev(it_lo), *it_lo);
      ++it_hi;
    }
    else
    {
      assert(it_lo->x == it_hi->x);
      distance = it_hi->y - it_lo->y;
      ++it_lo, ++it_hi;
    }
 
    if (distance < -EPSILON)
      throw EBadData(L"Ломаные изначально пересекаются");
 
    distances.push_back(std::max(distance, 0.));
  }
 
  assert(it_hi == hi.end());
 
  return distances;
}
 
unsigned count_lakes(const Distances &distances, double shift)
{ // Подсчитываем количество озер, которые получатся, если одну из ломаных пододвинуть к 
  // другой на растояние 'shift'
  assert(shift >= 0);
 
  unsigned n_lakes = 0;
  double prev_distance = 0;
 
  for (auto original_distance : distances)
  {
    double distance = original_distance - shift;
    assert(distance >= -EPSILON);
    distance = distance > EPSILON ? distance : 0;
 
    if (prev_distance == 0 && distance > 0)
      ++n_lakes;
 
    prev_distance = distance;
  }
 
  return n_lakes;
}
 
/****************************************************************************************/
 
int main()
{
   try
   {
     Points lo, hi;
     read_chains(lo, hi);
 
     Distances distances = calculate_distances(lo, hi);
 
     auto it_min = std::min_element(distances.begin(), distances.end());
     assert(it_min != distances.end());
     double min_distance = *it_min;
 
     unsigned n_lakes = count_lakes(distances, min_distance);
 
     std::wcout << n_lakes << std::endl;
   }
   catch (const EIo &e)
   {
     std::wcerr << L"Ошибка ввода-вывода: " << e.what << std::endl;
   }
   catch (const EBadData &e)
   {
     std::wcerr << L"Ошибка во входных данных: " << e.what << std::endl;
   }
}
1
03.12.2016, 22:18

Не по теме:

Первый раз вижу от TheCalligrapher больше 15-20 строчек.

0
03.12.2016, 22:26

Не по теме:


Цитата Сообщение от GbaLog- Посмотреть сообщение
Первый раз вижу от TheCalligrapher больше 15-20 строчек.
Мой код обычно содержит много вертикального spacing-а и на 50% состоит из assert. Здесь я, в погоне за краткостью, часто наступаю себе на горло. Пора прекращать.

Вышеприведенный код, кстати, насквозь пронизан душевными метаниями автора, пока не определившегося с тем, где следует позволить компилятору дедуцировать типы, а где их стоит указать явно.

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
03.12.2016, 22:26
Помогаю со студенческими работами здесь

Одномерный массив повышенной сложности
В вектора А обменять последний четный и первый неченый отрицательные элементы; заменить затем положительные элементы вектора суммой его...

Решение задач повышенной сложности
никак не разберусь, срочно надо до 23:00 01.11.2019

Задача повышенной сложности: Отчетность
Максимальное количество баллов: 40 Входной файл: input.txt Выходной файл: output.txt Время на тест: 2с Однажды Дмитрий...

задача повышенной сложности учитель дал
Два робота A и B двигаются по плоскости, с заданной на ней прямоугольной декартовой системой координат (ось Y направлена снизу вверх, ось X...

Задачи повышенной сложности с использованием массивов
Ртутные термометры могут использоваться для измерения темпера-туры до – 39,4 Со. Используя информацию о минимальной темпера-туре за каждый...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru