Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Сумма элементов в строке и столбце, В двумерном массиве 
:(
    Опции темы
Sazor
Дата 3.12.2010, 20:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 3.12.2010

Репутация: нет
Всего: нет



Есть двумерный массив размером SxS, число S задается во входном файле. Еще задаются координаты заполненных элементов(все остальные я заполняю 0). Заполненный элемент может содержать либо 1 либо -1. Надо расставить 1 и -1 таким образом, чтобы количество 1 и -1 в строке и в столбце разнилось не более чем на 1(т.е. сумма равна либо -1, либо 0, либо 1). Сумма в разных строках и столбцах может быть различна. Необходимо определить где 1, а где -1. Если расставить невозможно, то выводится "No". 
PM MAIL   Вверх
Akina
Дата 3.12.2010, 21:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 20
Всего: 454



Цитата(Sazor @  3.12.2010,  21:30 Найти цитируемый пост)
задаются координаты заполненных элементов

Цитата(Sazor @  3.12.2010,  21:30 Найти цитируемый пост)
Надо расставить 1 и -1 таким образом

1) Поясните, надо расставить их в незаполненные (нулевые) элементы или надо перераспределить имеющиеся? Если расставить - во все незаполненные, или мождно часть оставить нулевыми?
2) Гарантировано ли то, что при исходных данных задача имеет решение?




--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
Sazor
Дата 3.12.2010, 21:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 3.12.2010

Репутация: нет
Всего: нет



1) Только перераспределить имеющиеся (т.е. координаты которых нам даны в исходных данных). Все должны быть заполнены.
2) Данные по ограничениям подходят 100%, но "Если расставить невозможно, то выводится 'No'.  "
PM MAIL   Вверх
sandland
Дата 3.12.2010, 23:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 78
Регистрация: 28.4.2007

Репутация: нет
Всего: 1



Фактически мы получаем квадратную матрицу. SxS
Сложность алгоритма имеет значения?

Идея 1:
а) Проходим циклом по строкам, если в строке сумма не принадлежит {-1,0,1} - сдвигаем N необходимых "подходящих" элементов в строке на строку ниже.  ( под понятием "сдвигаем" понимаем следующее:  ищем в строке ниже 0-ой элемент, и меняем его с текущим, если 0 нету, ищем в строке еще ниже, если строки еще ниже нет, то идем вверх и пробуем обменять его уже на инвертированный элемент с сохранением требуемого диапазона сумм, т.е.  -1 обмениваем с 1 и наоборот. Но повторю, необходимо проверять новую сумму в обоих строках. )
N=|SUM-1|, "Подходящий элемент" - зависит от суммы, если сумма>1 , то убираем единицы, если  <-1 ,то сдвигаем -1 соответственно. 
Проходя последнюю строку, если сумма не удовлетворяет требованиям, то "подходящие элементы" раскидываем по оставшимся строчкам с 0 суммами, но возможен вариант, когда N>Кол-во строчек с sum=0 , тогда выводим "NO"


б) Проделываем аналогичную операцию над столбцами матрицы. Условия, достигнутые на первом этапе нарушены не будут, т.к перестановки по столбцам их не нарушат.

Другой вопрос - какие ограничения на модель?
Очевидно, что результат может быть не один, а несколько, смотря в какой последовательности и как делать перестановки.
+ этот алгоритм очень медленный, как минимум, зная ненулевые позиции его уже можно ускорить.

Пример:
 1  0  1           0  0  1
-1  0  1   =>  -1  1  1   =>  "NO"
 1  1  0           1  1  0


Еще 1

 1  -1  1           1  -1   1
-1  -1 -1   =>   1   -1  -1   =>  "DONE"
 1   1   1         -1  1   1


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

Это сообщение отредактировал(а) sandland - 3.12.2010, 23:38
PM MAIL WWW ICQ Jabber   Вверх
Akina
Дата 4.12.2010, 11:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 20
Всего: 454



Цитата(Sazor @  3.12.2010,  22:47 Найти цитируемый пост)
Только перераспределить имеющиеся (т.е. координаты которых нам даны в исходных данных). 

А нафига тогда начальные координаты? Куда как проще (и быстрее) расставлять "с нуля", имея размер матрицы и количества нулей и плюс-минус единиц.



--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
Sazor
Дата 4.12.2010, 14:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 3.12.2010

Репутация: нет
Всего: нет



Цитата(Akina @ 4.12.2010,  11:10)
А нафига тогда начальные координаты? Куда как проще (и быстрее) расставлять "с нуля", имея размер матрицы и количества нулей и плюс-минус единиц.

Распределить 1 и -1 нужно только по заданным координатам. Т.е. остальное пространство как бы дырки, которые изменять нельзя и они ни на что не влияют.
PM MAIL   Вверх
Akina
Дата 4.12.2010, 22:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 20
Всего: 454



Цитата(Sazor @  4.12.2010,  15:29 Найти цитируемый пост)
Распределить 1 и -1 нужно только по заданным координатам.

Т.е. обменивать местами до получения результата, что ли?


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
Sazor
Дата 5.12.2010, 12:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 3.12.2010

Репутация: нет
Всего: нет



Цитата(Akina @ 4.12.2010,  22:40)
Т.е. обменивать местами до получения результата, что ли?

Ну получается что так, только обменивать местами не надо, а надо изменять "статус" места с 1 на -1, и наоборот.
PM MAIL   Вверх
Akina
Дата 5.12.2010, 23:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 20
Всего: 454



А, то есть ещё и начальное количество плюс-минус единиц имеет право поменяться?





--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
Sazor
Дата 6.12.2010, 08:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 3.12.2010

Репутация: нет
Всего: нет



Цитата(Akina @ 5.12.2010,  23:05)
А, то есть ещё и начальное количество плюс-минус единиц имеет право поменяться?

Да. Более того, изначально там вообще ничего не стоит. Я просто помечаю его 1, например, чтобы знать, что здесь можно изменять статус.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Алгоритмы"

maxim1000

Форум "Алгоритмы" предназначен для обсуждения вопросов, связанных только с алгоритмами и структурами данных, без привязки к конкретному языку программирования и/или программному продукту.


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, maxim1000.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Алгоритмы | Следующая тема »


 




[ Время генерации скрипта: 0.1108 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.