Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Потрепаться";
Текущий архив: 2004.08.15;
Скачать: [xml.tar.bz2];

Вниз

Пятница. Большая пачка сложных задачек...   Найти похожие ветки 

 
Sandman25 ©   (2004-07-27 10:03) [160]

[158] Sha ©   (27.07.04 10:02)

Теперь я понимаю, зачем ты приплел де Моргана :)
Но все-таки он оказывается лишним.


 
Sha ©   (2004-07-27 10:05) [161]

Ну да, оказывается, все это время думал над другой задачей :(
Зато решил более сложную :)


 
Sandman25 ©   (2004-07-27 10:06) [162]

[161] Sha ©   (27.07.04 10:05)

Молодец! Очень полезный прием приведения сложной задачи к простой.


 
Sha ©   (2004-07-27 10:07) [163]

Sandman25 ©   (27.07.04 10:06) [162]

Рад стараться!


 
SergP ©   (2004-07-27 12:29) [164]

Я тоже немного подумал, получается примерно так: (вариант похожий на default"овский, но немножко усовершенствованный...
Правда может где и ошибся... Я не проверял...


// Подготавливаем один вектор на месте первой строки A[1..M,1]
x:=a[1,1];
for i:=2 to M do
 begin
 x:=x or a[i,1];   // в конце цикла в х будет true, если в строке есть хотя бы один true
 for j:=2 to N do  // формируем вектор
   begin
   a[i,1]:=a[i,1] or a[i,j];
   if a[i,1] then break;  // если уже true то далее незачем проверять
   end;
 end;
// Заполнение массива
for j=2 to N do
 begin
 // для начала узнаем есть ли в данной строке A[1..M,j] true
 z:=A[1,j]
 for i:=2 to M do
   begin
   z:=z or A[i,j];
   if z then break;
   end;
 // если есть то сразу же и заполняем строку...
 // как видно второй вектор нам не требуется
 if z then for i:=1 to M do a[i,j]:=z and a[1,j];        
 end;
// Если в первой строке не было true, то ставим там везде false
if not x then for i:=1 to M do a[i,1]:=false;


 
SergP ©   (2004-07-27 12:31) [165]


> SergP ©   (27.07.04 12:29) [164]


Я исходил из того что в массиве числа boolean, а не 0 или 1


 
Sandman25 ©   (2004-07-27 12:32) [166]

[165] SergP ©   (27.07.04 12:31)

Это одно и то же :)


 
SergP ©   (2004-07-27 12:41) [167]

Есть еще простой вариант но с большой сложностью:

for i:=1 to M do for j:=1 to N do
if a[i,j] then for x:=1 to M do for y:=1 to N do
  if a[x,y] then a[i,y]:=true;


 
SergP ©   (2004-07-27 12:43) [168]


> Sandman25 ©   (27.07.04 12:32) [166]
> [165] SergP ©   (27.07.04 12:31)
>
> Это одно и то же :)


Это понятно. Просто писать проще if a[i,j]  чем if a[i,j]=1
:)))


 
Sandman25 ©   (2004-07-27 12:46) [169]

[168] SergP ©   (27.07.04 12:43)

Не так.

var A: Byte;

if Boolean(A) then
...
A := Byte(True);


 
SergP ©   (2004-07-27 20:16) [170]


> SergP ©   (27.07.04 12:41) [167]
> Есть еще простой вариант но с большой сложностью:
>
> for i:=1 to M do for j:=1 to N do
> if a[i,j] then for x:=1 to M do for y:=1 to N do
>   if a[x,y] then a[i,y]:=true;


Или чуть побыстрее, типа так:

for i:=1 to M do for j:=1 to N do
if a[i,j] then for y:=1 to N do for x:=1 to M do
if a[x,y] then a[i,y]:=true else break else break;


 
SergP ©   (2004-07-27 20:23) [171]

Ой, блин, ошибся...

for i:=1 to M do
for j:=1 to N do
  if a[i,j] then
    begin  
      for y:=1 to N do
        for x:=1 to M do
          if a[x,y] then
            begin
              a[i,y]:=true;
              break;
            end;
   break;
   end;



Страницы: 1 2 3 4 5 вся ветка

Форум: "Потрепаться";
Текущий архив: 2004.08.15;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.74 MB
Время: 0.062 c
14-1090677468
Кириешки
2004-07-24 17:57
2004.08.15
Помогите люди бедному программисту...


14-1091292261
X9
2004-07-31 20:44
2004.08.15
Вопрос к обладателям WineX


14-1091271685
Sharknet.Ru
2004-07-31 15:01
2004.08.15
Есть у кого-нибудь хорошая работающая прграмма?


14-1090820397
syte_ser78
2004-07-26 09:39
2004.08.15
как програмно создать ярлык?


14-1090980029
Думкин
2004-07-28 06:00
2004.08.15
С днем рождения! 28 июля





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский