LSFIGHT - Đấu trường VM08

Tác giả: RR

Ngôn ngữ: Pascal

{$R+,Q+}
program LSFIGHT;
const
  FINP='';
  FOUT='';
  MAXN=500;
var
  a,d:array[1..MAXN,1..MAXN] of byte;
  next:array[1..MAXN] of integer;
  n:longint;
procedure inp;
var
  f:text;
  i,j:integer;
begin
  assign(f,FINP); reset(f);
  readln(f,n);
  for i:=1 to n do
  for j:=1 to n do
    read(f,a[i,j]);
  close(f);
end;
procedure ans;
var
  f:text;
  count,i:integer;
begin
  assign(f,FOUT); rewrite(f);
  count:=0;
  for i:=1 to n do
    if d[i,i]=1 then inc(count);
  writeln(f,count);
  for i:=1 to n do
    if d[i,i]=1 then writeln(f,i);
  close(f);
end;
procedure solve;
var
  l,i,j,k:integer;
begin
  for i:=1 to n do next[i]:=i mod n+1;
  for i:=1 to n-1 do d[i,i+1]:=1;
  d[n,1]:=1;
  for l:=2 to n do
  for i:=1 to n do
    begin
      j:=(i+l) mod n; if j=0 then j:=n;
      k:=next[i];
      while k<>j do
        begin
          if (d[i,k]=1) and (d[k,j]=1) then
            if (a[i,k]=1) or (a[j,k]=1) then
              begin
                d[i,j]:=1;
                break;
              end;
          k:=next[k];
        end;
    end;
end;
begin
  inp;
  solve;
  ans;
end.

Download