社区讨论

pascal 70分求改进

P2058[NOIP 2016 普及组] 海港参与者 1已保存回复 0

讨论操作

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

当前回复
0 条
当前快照
1 份
快照标识符
@mi5hsc5g
此快照首次捕获于
2025/11/19 12:18
4 个月前
此快照最后确认于
2025/11/19 12:18
4 个月前
查看原帖
CPP
var
 n,i,j,temp,time,people,w:longint;
 s,k,y,ren:array[1..2000] of longint;
 x:array[1..1000,1..3000] of integer;
procedure sort(l,r:longint);
var i,j,m:longint;
begin
 i:=l;
 j:=r;
 m:=s[y[(l+r) div 2]];
 while i<=j do begin
  while s[y[i]]<m do inc(i);
  while s[y[j]]>m do dec(j);
  if i<=j then 
  begin
   temp:=y[i];
   y[i]:=y[j];
   y[j]:=temp;
   dec(j);
   inc(i);
  end;
  end;
  if i<r then sort(i,r);
  if j>l then sort(l,j);
end;
procedure put(u:longint);
var
 i:longint;
begin
 for i:=1 to k[u] do 
 begin
  if ren[x[u,i]]=0 then inc(people);
  inc(ren[x[u,i]]);
 end;
end;
procedure delete(u:longint);
var
 i:longint;
begin
 for i:=1 to k[u] do 
  begin
   dec(ren[x[u,i]]);
   if ren[x[u,i]]=0 then dec(people);
  end;
end;
begin
 readln(n);
 for i:=1 to n do begin
  read(s[i],k[i]);
  for j:=1 to k[i] do read(x[i,j]);
  s[i+n]:=s[i]+86400;
  y[i]:=i;
  y[i+n]:=i+n;
  readln;
 end;
 sort(1,2*n);
 for i:=1 to 2*n do 
  if y[i]<=n then begin 
                   put(y[i]);
                   writeln(people);
                   inc(w);
                   if w=n then exit;
                  end
              else delete(y[i]-n);
end.

回复

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

正在加载回复...