⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ac1042.pas

📁 uralcode
💻 PAS
字号:
program ural1042;
const
  maxn=250;
var
  e:array[1..maxn,0..maxn]of boolean;
  n,i,j:integer;
  first:boolean;
procedure fail;
  begin
    writeln('No solution');
    halt;
  end;
procedure testfail;
  var
    j,k:integer;
    ok:boolean;
  begin
    for j:=1 to i do begin
      if e[j,0]=false then continue;
      ok:=false;
      for k:=1 to i do
        if e[j,k]=true then begin
          ok:=true;
          break;
        end;
      if not ok then fail;
    end;
  end;
procedure findtrue;
  var
    j,k:integer;
    b:boolean;
  begin
    for j:=i downto 1 do
      if e[j,i]=true then begin
        if j<i then
          for k:=0 to i do begin
            b:=e[j,k];e[j,k]:=e[i,k];e[i,k]:=b;
          end;
        exit;
      end;
  end;
procedure reduce;
  var
    j,k:integer;
  begin
    for j:=1 to i-1 do
      if e[j,i] then
        for k:=0 to n do
          e[j,k]:=e[j,k] xor e[i,k];
  end;
begin
  read(n);
  for i:=1 to n do begin
    e[i,0]:=true;
    repeat
      read(j);
      if j>0 then e[j,i]:=true;
    until j<0;
  end;

  for i:=n downto 1 do begin
    testfail;
    findtrue;
    if e[i,i] then reduce;
  end;

  for i:=1 to n do begin
    for j:=1 to i-1 do
      if e[i,j] then e[i,0]:=e[i,0] xor e[j,0];
    if e[i,0] and not e[i,i] then fail;
  end;

  first:=true;
  for i:=1 to n do
    if e[i,0] then begin
      if first then first:=false else write(' ');
      write(i);
    end;
  writeln;
end.

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -