社区讨论

p党求助,为什么只有40分?

P2024[NOI2001] 食物链参与者 1已保存回复 1

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
1 条
当前快照
1 份
快照标识符
@mi6y6h00
此快照首次捕获于
2025/11/20 12:44
4 个月前
此快照最后确认于
2025/11/20 12:44
4 个月前
查看原帖
PASCAL
var
 last,next:array[1..3] of longint;
 flag:array[0..50005] of boolean;
 z,yy,ans,n,k,i,x,zz,y:longint;
 f:array[0..50005] of longint; 

function max(a,b:longint):boolean;
 begin
  if (a=1) and (b=2) then exit(true);
  if (a=2) and (b=3) then exit(true);
  if (a=3) and (b=1) then exit(true);
  exit(false);
 end;

begin
  read(n,k);
  for i:=1 to 2 do next[i]:=i+1;next[3]:=1;
  for i:=2  to 3 do last[i]:=i-1;last[1]:=3;
  for i:=1 to k do 
   begin
    read(x,y,z);
    if (y>n) or (y<1) or (z>n) or (z<1) then inc(ans) else
     begin
      if x=1 then
       begin
        if (flag[y] and flag[z]) and (f[y]<>f[z]) then inc(ans);
        if flag[y] and not flag[z] then 
         begin 
          f[z]:=f[y];flag[z]:=true;
         end;
        if flag[z] and not flag[y] then 
         begin 
          f[y]:=f[z];flag[y]:=true;
         end;
        if (not flag[y]) and (not flag[z]) then 
         begin 
          f[y]:=1;f[z]:=1;flag[y]:=true;flag[z]:=true;
         end;
       end;
    if x=2 then
     begin
      if (flag[y] and flag[z]) and (next[f[y]]<>f[z]) then inc(ans);
      if flag[y] and not flag[z] then
       begin
        f[z]:=next[f[y]];flag[z]:=true;
       end;
      if flag[z] and not flag[y] then
       begin
        f[y]:=last[f[z]];flag[y]:=true;
       end;
      if (not flag[z]) and (not flag[y]) then
       begin
        f[y]:=1;f[z]:=2;flag[y]:=true;flag[z]:=true;
       end;
     end;
    end;
   end;
  writeln(ans);
end.

回复

1 条回复,欢迎继续交流。

正在加载回复...