Форум программистов, компьютерный форум CyberForum.ru

найти точку, принадлежащую - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ найти первые N целых чисел http://www.cyberforum.ru/cpp-beginners/thread426561.html
найти первые N целых чисел, у которых младший байт является зеркальным отражением следующего байта
C++ массивы сортировка простая сортировка обменами. напишите плиз.. http://www.cyberforum.ru/cpp-beginners/thread426560.html
Определить, можно ли в заданной матрице найти столбец, удовлетворяющий условию C++
Задача :Определить можно ли в двумерном массиве найти такой столбец, который разбивает массив на два так, что сумма элементов в первом больше, чем сумма элементов во втором. Сам столбец в разбиваемые части не входит. Подскажите примерно как сделать эту задачку и с чего начать
C++ Ошибки в Code Blocks
Есть такая проблемка #include <iostream> using namespace std; int main() { int 1; int 2; int 4;
C++ Помогите исправить программу запись в файл http://www.cyberforum.ru/cpp-beginners/thread426536.html
Нужно записат в файл массив чисел от 100 до 300 заполнить случайным образом. В файл записываются одни символы. помогите исправить программу #include <iostream> #include <time.h> #include <stdio.h> using namespace std; const int n=100; int d; char p; int k; size_t file;
C++ Добавление и удаление элемента динамического массива Подскажите какие существую способы добавления и удалеия элемента одномерного динамического массива(переопределяя размер массива). Желательно не используя vector. есть вот такое вот: #include<stdio.h> #include<string.h> #include<stdlib.h> void add(int*,int); void del(int*,int); void main() подробнее

Показать сообщение отдельно
Mr.X
Эксперт С++
3049 / 1694 / 265
Регистрация: 03.05.2010
Сообщений: 3,867
13.01.2012, 00:25
Цитата Сообщение от BRcr Посмотреть сообщение
Вот то, что Mr.X сваял, то - да, жесть
Действительно, два счетчика в мэпе - это жесть, можно использовать один:
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
/////////////////////////////////////////////////////////////////////////////////////////
//Дано множество отрезков на прямой. Найти точку, которая принадлежит наибольшему 
//количеству отрезков, определить это количество.
/////////////////////////////////////////////////////////////////////////////////////////
#include <algorithm>
#include <complex>
#include <iostream>
#include <iterator>
#include <map>
#include <numeric>
#include <vector>
/////////////////////////////////////////////////////////////////////////////////////////
typedef double                                  T_coord;
typedef int                                     T_counter;
typedef std::complex    <T_coord>               T_segment;
typedef std::vector     <T_segment>             T_segments;
typedef std::map        <T_coord, T_counter>    T_segm_end_points;
typedef std::vector     <T_counter>             T_counters;
/////////////////////////////////////////////////////////////////////////////////////////
void  fill_segm_end_points
    (
        const T_segments&   segments,
        T_segm_end_points&  segm_end_points
    )
{
    for(
        T_segments::const_iterator  segm_it = segments.begin();
        segm_it != segments.end();
        ++segm_it
       )
    {
        ++segm_end_points[segm_it->real()];
        --segm_end_points[segm_it->imag()];
    }
}
/////////////////////////////////////////////////////////////////////////////////////////
void  get_max_segm_counter_and_max_segm_counter_point
    (
        const T_segments&   segments,
        T_counter&          max_segm_counter,
        T_coord&            max_segm_counter_point    
    )
{
    T_segm_end_points  segm_end_points;
 
    fill_segm_end_points
        (
            segments,
            segm_end_points
        );
 
    struct  T_get_counter
    {
        T_counter  operator() (const T_segm_end_points::value_type&  segm_end_points_elem)
        {
            return  segm_end_points_elem.second;
        }
    };
 
    T_counters  counters;
    std::transform
        (
            segm_end_points.begin(),
            segm_end_points.end(),
            std::back_inserter(counters),
            T_get_counter()
        );
 
    T_counters  counters_sums;
    std::partial_sum
        (
            counters.begin(),
            counters.end(),
            std::back_inserter(counters_sums)
        );
    
    T_counters::iterator  max_sum_it  =     std::max_element
                                                (
                                                    counters_sums.begin(),
                                                    counters_sums.end()
                                                );
 
    max_segm_counter    = *max_sum_it;
 
    int  max_sum_dist   =   std::distance
                                (
                                    counters_sums.begin(),
                                    max_sum_it
                                );
 
    T_segm_end_points::const_iterator  L = segm_end_points.begin();
    std::advance(L, max_sum_dist);
    T_segm_end_points::const_iterator  R = L;
    std::advance(L, 1);
 
    max_segm_counter_point = (L->first + R->first) / 2.0;
}
/////////////////////////////////////////////////////////////////////////////////////////
void  input_segments(T_segments&  segments)
{
    int  segments_total = 0;
    do
    {
        std::cout << "Введите количесто заданных отрезков на прямой: ";
        
        std::cin >> segments_total;    
    }while(segments_total <= 0);
 
    std::cout << "Введите координаты "
              << segments_total
              << " отрезков в виде (1.2,3.4):"
              << std::endl;
 
    segments.resize(segments_total);
    for(int  i = 0; i < segments_total;)
    {        
        std::cout << "\t#"
                  << i + 1
                  << ": ";
        
        std::cin >> segments[i];
        if( segments[i].real() < segments[i].imag() )
        {
            ++i;
        }
    }
}
/////////////////////////////////////////////////////////////////////////////////////////
int main()
{
    std::locale::global(std::locale(""));
    T_segments  segments;
 
    input_segments(segments);
    
    T_counter   max_segm_counter        = 0;
    T_coord     max_segm_counter_point  = 0;
 
    get_max_segm_counter_and_max_segm_counter_point
        (
            segments,
            max_segm_counter,
            max_segm_counter_point
        );
 
    std::cout << "Наибольшему количеству отрезков ("
              << max_segm_counter
              << ") принадлежит точка "
              << max_segm_counter_point
              << "."
              << std::endl;
}
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru