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

Разработать программу для определения объема оставшейся воды в теле, если оно полностью погружается в воду основанием вниз, а затем поднимается. - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Разбить строку на слова http://www.cyberforum.ru/cpp-beginners/thread1092296.html
Разбить строку на слова. Все слова записать в отдельную строку. Помогите пожалуйста не получается. #include <iostream> #include <string> #include <cctype> #include <conio.h> using namespace std; int main() {
C++ Связать векторы Доброго времени суток. У меня есть 4 класса: студент(id, имя, фамилия), факультет(id, название), занятия(id, название, тип), оценка(1-й термин, 2-й, 3-й, 4-й). Связаны наследованием так. ФАКУЛЬТЕТ->ЗАНЯТИЕ->ОЦЕНКА<-СТУДЕНТ Есть вектор студентов, который выводится с помощью fstream в .txt и снова вводится в программу уже под видом списка. Думаю сделать еще 3 вектора для остальных классов, но... http://www.cyberforum.ru/cpp-beginners/thread1092294.html
C++ warning: ‘lectors’ is used uninitialized in this function
Здравствуйте. Делаю вот костяк программы. Пока компилируется без ошибок, но с предупреждениями, относительно четырех указателей (как в названии темы) Вырезки с кода: #include <iostream> #include "init.hpp" int main() {
Составить программу, которая создает очередь из произвольного количества элементов C++
Составить программу, которая создает очередь из произвольного количества элементов. Информационная часть динамического элемента должна состоять из двух строк. Не получается-Организовать обработку каждого элемента: печать строк из информационной части и их первых символов. Вот наработки: #include <iostream> #include <conio.h> #include <stdio.h> #include <stdlib.h> using namespace std;...
C++ Как добавить в вектор содержимое вложенных каталогов http://www.cyberforum.ru/cpp-beginners/thread1092255.html
Здравствуйте, подскажите пожалуйста как добавить в вектор содержимое внутренних каталогов, а не только тех которые содержатся в указанной папке. Есть код, в котором в командной строке задаешь аргумент(нужную папку), аргумент argv, далее содержимое указанно папки заносится в вектор и выводится, помогите пожалуйста дописать код так, что бы в вектор заносились все вложенные папки всех вложенных...
C++ Сколько съел Винни-Пух на 15-ый День Рождения Винни-пух на свое день рождение ведает столько еды сколько съел на двух предыдущих на первых двух днях он съел по 100 шрам нужноузнать сколько он съел на 15-й день рождение подробнее

Показать сообщение отдельно
Eldies
90 / 81 / 28
Регистрация: 06.02.2014
Сообщений: 119
09.02.2014, 02:27     Разработать программу для определения объема оставшейся воды в теле, если оно полностью погружается в воду основанием вниз, а затем поднимается.
Можно и по-другому.
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
int solve(int N, int M, std::vector<std::vector<int>>& matrix1)
{
    int maxValue = 0;
    for(int i = 0; i < N; ++i)
        for(int j = 0; j < M; ++j)
            maxValue = max(maxValue, matrix1[i][j]);
 
    std::vector<std::vector<int>> matrix2(N);
    for(int i=0;i<N;++i)
        matrix2[i].resize(M,maxValue);
 
    std::set<std::pair<int,int>> pset;
 
    for(int i=0;i<N;++i)
    {
        pset.insert(std::pair<int,int>(i,0));
        pset.insert(std::pair<int,int>(i,M-1));
    }
    for(int j=0;j<M;++j)
    {
        pset.insert(std::pair<int,int>(0,j));
        pset.insert(std::pair<int,int>(N-1,j));
    }
 
    while(pset.size() > 0)
    {
        std::pair<int,int> point = *pset.begin();
        pset.erase(pset.begin());
        int i = point.first;
        int j = point.second;
 
        int minNeighbour = INT_MAX;
        if (j == 0 || j == M-1 || i == 0 || i == N-1) minNeighbour = 0;
        if (j < M-1)    minNeighbour = min(minNeighbour, matrix2[i][j+1]);
        if (j > 0)      minNeighbour = min(minNeighbour, matrix2[i][j-1]);
        if (i < N-1)    minNeighbour = min(minNeighbour, matrix2[i+1][j]);
        if (i > 0)      minNeighbour = min(minNeighbour, matrix2[i-1][j]);
 
        if (minNeighbour < matrix2[i][j] && matrix2[i][j] > matrix1[i][j])
        {
            matrix2[i][j] = max(matrix1[i][j], minNeighbour);
 
            if (j < M-1)    pset.insert(std::pair<int,int>(i,j+1));
            if (j > 0)      pset.insert(std::pair<int,int>(i,j-1));
            if (i < N-1)    pset.insert(std::pair<int,int>(i+1,j));
            if (i > 0)      pset.insert(std::pair<int,int>(i-1,j));
        }
    }
 
    int result = 0;
    for(int i = 1; i < N-1; ++i)
        for(int j = 1; j < M-1; ++j)
            result += matrix2[i][j] - matrix1[i][j];
 
    return result;
}
Не http://www.cyberforum.ru/cgi-bin/latex.cgi?O(N^2M^2) в худшем случае, а http://www.cyberforum.ru/cgi-bin/latex.cgi?O(NM).
И решения, которое было бы асимптотически лучше, очевидно, не существует.
Дальнейшая оптимизация, конечно, возможна, но, если нет конкретных ограничений на параметры и время, смысла ей заниматься тоже особо нет.
 
Текущее время: 05:44. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru