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

Найти сумму периметров заданных геометрических фигур

06.11.2016, 00:51. Показов 1416. Ответов 1
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Олимпиадная задачка:

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

Формат входных данных
В первой строке входного файла записано число N - количество прямоугольников. В следующих N строках записаны числа x1 y1 x2 y2 - декартовы координаты нижнего левого и правого верхнего углов прямоугольника. Все координаты - целые числа по модулю не превышают 10000.

формат результата
В выходной файл нужно записать сумму периметров образованных геометрических фигур (прямоугольников, многоугольников).

Примеры

Входные данные в файле input.txt
7
-15 0 5 10
-5 8 20 25
15 -4 24 14
0 -6 16 4
2 15 10 22
30 10 36 20
34 0 40 16

Результат работы в файле output.txt
228
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
06.11.2016, 00:51
Ответы с готовыми решениями:

Посчитать общую сумму периметров всех образованных геометрических фигур
На доске наклеено несколько листов объявлений. Все они прямоугольной формы. Некоторые письма...

Нарисовать узор, составленный из геометрических фигур заданных случайными координатами
:cry:помогитеееее!!!срочно плиз!!!!!задача на паскаль абс нужно написать прогорамму которая...

Найти сумму их периметров и сумму площадей треугольников по его сторонам
Привет! Люди прошу у Вас помощи, нужно сдавать работы 6 июня а у меня ни одной нет. Паскаль не...

Даны основания и высоты двух равнобедренных трапеции. Найти сумму их периметров и сумму их площадей
может кто помочь? пожалуйста)

1
Эксперт С++
3225 / 1752 / 436
Регистрация: 03.05.2010
Сообщений: 3,867
13.11.2016, 23:42 2
Лучший ответ Сообщение было отмечено antonmyronyuk как решение

Решение

Цитата Сообщение от antonmyronyuk Посмотреть сообщение
Олимпиадная задачка:
Вот мое решение:
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
///////////////////////////////////////////////////////////////////////////////
//9.
///////////////////////////////////////////////////////////////////////////////
//На доске наклеено несколько листов объявлений. Все они
//прямоугольной формы. Некоторые письма накладываются частично
//или полностью. Все горизонтальные и вертикальные стороны
//строго взаимно параллельны. Письма, которые частично
//накладываются образуют многоугольник.
//Директор рекламного агентства для подсчета стоимости
//размещенных объявлений приказал менеджерам посчитать общую
//сумму периметров всех образованных таким образом геометрических
//фигур (прямоугольников, многоугольников). Понятно, что,
//когда письмо с объявлением полностью перекрывается другим,
//то периметр первого нигде не учитывается.
 
//Формат входных данных
//В первой строке входного файла записано число N - количество
//прямоугольников. В следующих N строках записаны числа x1 y1 x2 y2 -
//декартовы координаты нижнего левого и правого верхнего углов
//прямоугольника. Все координаты - целые числа по модулю не
//превышают 10000.
 
//формат результата
//В выходной файл нужно записать сумму периметров образованных
//геометрических фигур (прямоугольников, многоугольников).
 
//Примеры
 
//Входные данные в файле input.txt
//7
//-15 0 5 10
//-5 8 20 25
//15 -4 24 14
//0 -6 16 4
//2 15 10 22
//30 10 36 20
//34 0 40 16
 
//Результат работы в файле output.txt
//228
///////////////////////////////////////////////////////////////////////////////
#include <array>
#include <bitset>
#include <iostream>
///////////////////////////////////////////////////////////////////////////////
const   int     MAX_ABS_VAL     { 10000                 };
const   int     COORD_SHIFT     { MAX_ABS_VAL   +   1   };
const   int     BOARD_DIM       { COORD_SHIFT   *   2   };
///////////////////////////////////////////////////////////////////////////////
typedef std::bitset     < BOARD_DIM                 >   T_board_row;
typedef std::array      < T_board_row,  BOARD_DIM   >   T_board_val;
///////////////////////////////////////////////////////////////////////////////
class   T_board
{
    //-------------------------------------------------------------------------
    T_board_val     board_val_;
    //-------------------------------------------------------------------------
public:
    //-------------------------------------------------------------------------
    void    add_rectangle
        (
            int     x_min,
            int     y_min,
 
            int     x_max,
            int     y_max
        )
    {
        T_board_row     factor_row;
        factor_row.flip();
 
        factor_row  <<=         x_max
                            -   x_min;
 
        factor_row.flip();
        factor_row  <<=         x_min
                            +   COORD_SHIFT;
 
        for (
                auto
                j   =   y_min + COORD_SHIFT;
                j   <   y_max + COORD_SHIFT;
                ++j
            )
        {
            board_val_[j]   |=  factor_row;
        }//for
    }
    //-------------------------------------------------------------------------
    int     perimeters_sum_of_outer_and_inner_contours()                    const
    {
        int             res{};
        T_board_row     row_prev;
 
        for( size_t  i{}; i < board_val_.size(); ++i )
        {
            auto    row_cur     =   board_val_[i];
 
            if(i)
            {
                row_prev    ^=  row_cur;
 
                auto
                row_shift   =   row_cur;
                row_shift   <<= 1;
                row_shift   ^=  row_cur;
 
                res         +=  row_prev    .count();
                res         +=  row_shift   .count();
            }//if
 
            row_prev    =   row_cur;
        }//for
 
        return  res;
    }
    //-------------------------------------------------------------------------
};
///////////////////////////////////////////////////////////////////////////////
T_board     board;
///////////////////////////////////////////////////////////////////////////////
int     main()
{
    int     n{};
    std::cin    >>  n;
 
    for( int  i{}; i < n; ++i )
    {
        double  x_min{};
        double  y_min{};
 
        std::cin   >>  x_min;
        std::cin   >>  y_min;
 
        double  x_max{};
        double  y_max{};
 
        std::cin   >>  x_max;
        std::cin   >>  y_max;
 
        board.add_rectangle     (
                                    x_min,
                                    y_min,
 
                                    x_max,
                                    y_max
                                );
    }//for
 
    std::cout   <<  board.perimeters_sum_of_outer_and_inner_contours()
                <<  std::endl;
}
2
13.11.2016, 23:42
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
13.11.2016, 23:42
Помогаю со студенческими работами здесь

Найти сумму периметров и сумму площадей равнобедренных трапеций
1. Имеется некоторая последовательность символов. Образовать новую последовательность, включив в...

Найти сумму периметров и сумму площадей равнобедренных трапеций
2) Даны основания и высоты десяти равнобедренных трапеций. Найти сумму их периметров и сумму их...

Найти сумму периметров треугольников и сумму их площадей
Даны стороны двух треугольников. Найти сумму их площадей и сумму их периметров определить процедуру...

Найти сумму периметров и сумму площадей прямоугольников
1.Составить программу в результате которой, величина А меняется значением с величиной В. А величина...

Найти сумму периметров треугольников и сумму их площадей
Даны стороны двух треугольников. Найти сумму их периметров и сумму их площадей. Определить...

Найти сумму периметров трапеций
С клавиатуры вводятся основания и высоты двух равнобедренных трапеций. Найти сумму их периметров....


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

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru