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

Стена

04.02.2011, 21:17. Показов 2158. Ответов 2
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Вот условие задачи:
Однажды майор Пронин затеял в квартире ремонт. В одной из стен на кухне по плану потребовалось последовательно проделать (N–1) прямоугольных вентиляционных отверстий с горизонтальными и вертикальными сторонами (0 < N < 101). Если оказывалось, что очередное отверстие пересекается с уже проделанными, то майор вырезал только нетронутую часть соответствующего прямоугольника.

Следующая стадия после ремонта – это поклейка обоев. В магазине напротив майор может заказать не более (2N–1)2 прямоугольных кусков обоев любых размеров c ненулевой площадью. Он хочет обклеить стену кусками обоев так, чтобы:

1. Вентиляционные отверстия не были заклеены даже частично.

2. Никакие два куска не пересекались (касаться сторонами они при этом могут).

3. На стене не осталось бы непокрытой области.

Формат входных данных

Рассмотрим декартову систему координат, оси которой параллельны сторонам отверстий и стены.

Сначала вводится число N (0 < N < 101), далее – описание N прямоугольников. Первый прямоугольник описывает положение стены в нашей системе координат, остальные (N–1) ― положения отверстий в порядке их появления. Стороны всех прямоугольников параллельны осям координат. Каждый прямоугольник задаётся координатами своих левого нижнего и правого верхнего углов: x1, y1, x2, y2. Координаты — целые числа, не превосходящие по модулю 31000, x1 < x2, y1 < y2.

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

Формат выходных данных

Вначале выведите количество кусков обоев K, которое нужно заказать в магазине (K должно быть не больше (2N–1)2). Далее выведите схему поклейки: K прямоугольников, обозначающих места расположения заказанных кусков. Для каждого прямоугольника нужно вывести координаты его левого нижнего и правого верхнего углов. Все координаты должны быть целыми числами. Гарантируется, что решение существует.

Если возможных способов несколько, выведите любой.



Я её написал но уверен что можно существенно короче и хотелось бы узнать как)
Вот если что моё решение(формат вывода немного отличается от формата в условии но это ничего )) )

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
#include <iostream>
using namespace std;
int kor[10001][10001];
bool nextline(int j,int a)
{
 
    for(int i=0;i<=a;i++)
        if(kor[j][i]!=kor[j+1][i])
            return false;
    return true;
}
bool line(int j,int a)
{
    for(int i=0;i<=a;i++)
        if(kor[j][i]!=0)
            return false;
    return true;
}
bool ost(int b,int j,int a)
{
    if(b>a)
    return false;
    for(int i=b;i<=a;i++)
        if(kor[j][i]!=1)
            return false;
    return true;
}
int main()
{
    int n;
    cin>>n;
    int x1,x2,y1,y2,a,b,c,d;
    cin>>x1>>y1>>x2>>y2;
    for(int j=0;j<=y2-y1;j++)
    for(int i=0;i<=x2-x1;i++)
    {
        kor[j][i]=0;
    }
    for(int g=1;g<n;g++) {
    cin>>a>>b>>c>>d;
    for(int j=a-y1;j<=c-y1;j++)
    for(int i=b-x1;i<=d-x1;i++)
    kor[j][i]=1;
    }
    for(int j=0;j<=y2-y1;j++,cout<<endl)
    for(int i=0;i<=x2-x1;i++)
    cout<<" "<<kor[j][i]<<" ";
    int i=0;
    int j=0;
    int g;
    while(j<=y2-y1)
    {
        if(line(j,x2-x1)) {
        cout<<j+y1<<" "<<0+x1<<" ";
        while(line(j+1,x2-x1) && j<y2-y1)
        j++;
        cout<<j+y1<<" "<<x2<<endl; j++; }
        else {
        while(kor[j][i]==1)
        if(i<=x2-x1)
            i++;
        else {
            j++; i=0; }
        cout<<j+y1<<" "<<i+x1<<" ";
        g=j;
        int b=i;
        while(true) {
        if(i<x2-x1 && kor[g][i+1]==0) {
            i++; }
        else {
                if(i==x2-x1)
                j++;
                if(!nextline(g,x2-x1))
                break;
                i=b;
                g++;        } }
        cout<<g+y1<<" "<<i+x1<<endl;
        if(ost(i+1,j,x2-x1)) {
        while(nextline(j,x2-x1))
        j++; j++; i=-1;}
        if(i==x2-x1)
        i=-1;
        i++; }
    }
}
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
04.02.2011, 21:17
Ответы с готовыми решениями:

Красивая стена
Красивая стена (Время: 1 сек. Память: 16 Мб Сложность: 25%) Однажды великий художник Гигабайт подарил королю Байтландии одно из своих...

Стена!
Как сделать стену на подобии вк или твиттер? за ранее спс

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

2
7 / 7 / 1
Регистрация: 02.12.2010
Сообщений: 71
07.02.2011, 20:16  [ТС]
и что так никто и не поможет?((
Тогда хотя бы подскажите где помогут)
0
7 / 7 / 1
Регистрация: 02.12.2010
Сообщений: 71
08.02.2011, 20:48  [ТС]
.....
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
08.02.2011, 20:48
Помогаю со студенческими работами здесь

Стена как в вк
Всем привет. Щас делаю проект с подключением vk api, и мне надо сделать вывод постов страницы в delphi, как написать код на вывод данных...

Стена пользователей
Ставил плагин на свой скрипт и вот в чём проблема: когда кому-то оставляешь запись на стене, то под твоим комментарием показывает аву и...

Стена как ВК
Добрый вечер! Подскажите. На сайте есть у пользователей стена. В БД записывается ID, текст и ник автора записи на стене. Подскажите как...

Красивая стена
По заданному числу K найти размеры самого красивого прямоугольника (H и W). Для определения степени красоты учитываются 2 параметра: ...

Стена с сообщениями
Такой вопрос, у меня есть небольшая социальная сеть, но я не представляю как сделать там стену с сообщениями. Да так что бы ещё...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru