Cod sursa(job #583311)

Utilizator gicu_01porcescu gicu gicu_01 Data 19 aprilie 2011 16:59:11
Problema Party Scor 30
Compilator fpc Status done
Runda Arhiva de probleme Marime 1.17 kb
var a:array[1..21]of boolean;
    b:array[1..1000,1..3]of integer;
    n,m:integer;
procedure init;
var f:text; i:integer;
begin
 assign(f,'party.in');
 reset(f);
 readln(f,n,m);
 for i:=1 to m do readln(f,b[i,1],b[i,2],b[i,3]);
 close(f);
end;

procedure afis;
var i,k:byte; f:text;
begin
 assign(f,'party.out');
 rewrite(f);
 k:=0;
 for i:=1 to n do
  if a[i] then inc(k);
writeln(f,k);
 for i:=1 to n do
  if a[i] then writeln(f,i);
 close(f);
end;
procedure afis2;
var i,k:byte; f:text;
begin

 for i:=1 to n do write(a[i],' ');
end;

function bool:boolean;
var i:integer; t:boolean;
begin
 t:=true;
 for i:=1 to m do
  begin
   if (b[i,3]=0) then t:=(t)and(a[b[i,1]]or(a[b[i,2]])) else
   if (b[i,3]=1)or(b[i,3]=2) then
    begin
     if a[b[i,1]] then t:=(t)and(a[b[i,1]]) else t:=(t)and(not a[b[i,2]]);
    end else
   if b[i,3]=3 then t:=(t)and(not((a[b[i,1]])and(a[b[i,2]])));
  end;
 bool:=t;
end;

procedure gen_bin(p:byte);
begin
 if p>n then
  begin
   if bool then begin afis; halt; end;
  end

  else begin
   a[p]:=true; gen_bin(p+1);
   a[p]:=false; gen_bin(p+1);
  end;
end;

begin
 init;
 gen_bin(1);
end.