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

Найти площадь крупнейшего сплошного прямоугольника суши - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Ошибка при компиляции(Тестирование памяти) http://www.cyberforum.ru/cpp-beginners/thread712291.html
error C3861: 'ReadMemory': identifier not found(на MSDN написано что нужно подключить то та-то) Подключаю одну из двух написанных(If you are writing a WdbgExts extension, include wdbgexts.h. If you are writing a DbgEng extension that calls this function, include wdbgexts.h before dbgeng.h) wdbgexts.h- подключаю пишет ": fatal error C1083: Cannot open include file: 'wdbgexts.h': No such file...
C++ Нахождение разных чисел в массиве помогите пожалуйста пересести на с++ program p3; uses crt; var a:array of integer; i,j,n,z,l:integer; begin http://www.cyberforum.ru/cpp-beginners/thread712287.html
C++ Упорядочить строки матрицы по возрастанию их первых элементов
В работе память для массива должна выделяться динамически. На экран выводить исходные данные и результат. Дана матрица размером NxM. Упорядочить ее строки по возрастанию их первых элементов. #include "iostream.h" #include "iomanip.h" #include "math.h"
Сумма ряда C++
Вычислить сумму первых n членов ряда, где n-ный член ряда вычисляется по формуле (x^n)/n. Суть проблемы: дальше определённого значения вычисления не идут. Например, для числа 2 сумма не получается больше 6.389057, для 3 - больше 19.085539, и т.д. #include <stdio.h> #include <conio.h> int main() { int i=1, n; float x, sum=0, xn=1;
C++ создание классов http://www.cyberforum.ru/cpp-beginners/thread712280.html
Создать класс Зачет, имеющий поля: название предмета, зачет (лог. поле). Создать производный класс Экзамен, имеющий поле оценка
C++ можно ли считать данный код реализацией очереди можно ли считать данный код реализацией очереди. и если нет, то почему. #include <stdlib.h> #include <stdio.h> typedef struct LIST{ int val; struct LIST *ptr; }; подробнее

Показать сообщение отдельно
SatanaXIII
Супер-модератор
Эксперт С++
5578 / 2612 / 239
Регистрация: 01.11.2011
Сообщений: 6,422
Завершенные тесты: 1
04.12.2012, 14:48     Найти площадь крупнейшего сплошного прямоугольника суши
Ах-ха-ха-ха-ха! (гомерический смех) Ну что за тупизм.
Придумал.
Сначала подумалось, что раз такая пьянка, то почему бы и не перебирать вообще ВСЕ прямоугольники, и смотреть заполнены ли они единицами. Почему бы и нет. Так меньше проходов получится. по сути это двойной проход по всей площади: сначала один угол стоит, а второй пробегает все значения, потом первый угол сдвигается на один элемент, второй при этом опять пробегает все значения. Это два цикла. А третий, самый вложенный уже проверяет выбранную площадь от одного угла до другого на полное заполнение единицами.

Фигня! Круче способ:
1) Один главный проход по всем элементам всей области слева направо, сверху вниз.
2) Если попадается единица, от нее (Mas[i,j]) вправо отсчитываем до первого встретившегося нуля (или края области). Запоминаем (x). От нее же отсчитываем вниз до нуля (края). Запоминаем (y).
3) Двойной цикл от j до y и от i до x: перебираем область. Если нули не встречаются, тогда запоминаем площадь и координаты сектора. Если встречается ноль, то сравниваем что меньше текущее значение от j до y или от i до x (грубо говоря мы по строке дальше сдвинулись вправо или по столбцу опустились). Соответственно запоминаем наибольшее значение для площади.
4) Сравниваем с предыдущим наибольшим значением.

Название: 5555.JPG
Просмотров: 188

Размер: 5.6 Кб

Красный квадрат - текущий элемент.
Красные стрелки - проход вправо и вниз.

Синий квадрат - общая область для этого элемента.

Зеленый овал - полученная область.
Зеленые стрелки - обход выбранной области.
 
Текущее время: 00:17. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru