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

Стена - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Названия вложенных структур http://www.cyberforum.ru/cpp-beginners/thread238311.html
Почему поле структуры, содержащее переменные другой структуры, воспринимается компилятором без возражений лишь в том случае, если название вложенной структуры написано с заглавной буквы?
C++ Разложение Холецкого и решение СЛАУ на его основе спасайте люди добрые... признаюсь сразу, я пень-пнём в С++. Мне задан курсовик "Разложение Холецкого и решение СЛАУ на его основе". В общем, прошу вас, напишите кто-нибудь рабочий код данной задачи, если не влом... (редактор Borland С++ Builder) я уже второй день убил на поиски программы, никак не найду код на С++... заранее благодарю... http://www.cyberforum.ru/cpp-beginners/thread238307.html
C++ С++ только начал
Я, по совету друга решил начать с++. начал с хелловорлд, и сразу вот такая проблема возникла (Вложенный рисунок)
abs для типа double C++
У меня в программе нужно сравнивать разность модулей двух чисел, но abs конвертирует в int. Как это можно обойти при этом чтоб минимально перезагружать процессор?
C++ Ввести строку и слово. Вывести порядковые номера слов в строке,совпадающих с введенным словом http://www.cyberforum.ru/cpp-beginners/thread238285.html
Друзья,не сочтите за наглость ;-) Нужно на языке С Задание: Ввести строку и слово. Вывести порядковые номера слов в строке, совпадающих с введенным словом. Люблю вас :-***
C++ Как создать программу, и сохранить её как файл Добрый вечер. У меня вопрос: как создать программу, и сохранить её как файл. Например: Я создал программу которая будет определять мой IP адрес. Как мне её сохранить что бы потом запустив её она мне высвечивала мой IP адрес? Спасибо. подробнее

Показать сообщение отдельно
shocoladka
7 / 7 / 0
Регистрация: 02.12.2010
Сообщений: 71

Стена - C++

04.02.2011, 21:17. Просмотров 832. Ответов 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++; }
    }
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru