比赛 NOIP2008集训模拟4 评测结果 AWAAWAAAAA
题目名称 彩色穿孔卡片 最终得分 80
用户昵称 francis 运行时间 0.000 s
代码语言 Pascal 内存使用 0.00 MiB
提交时间 2008-11-13 11:22:48
显示代码纯文本
program punch;
const
fin='punch.in';
fou='punch.out';
var
c,l,r,a,p,q:array[1..10000]of longint;
all,m,k,x,y,n,i,j:longint;
bo:boolean;
f1,f2:text;

procedure init;
begin
assign(f1,fin);
assign(f2,fou);
reset(f1); rewrite(f2);
read(f1,n);
for i:=1 to n do
read(f1,p[i],q[i]);
a[1]:=p[n]; c[1]:=q[n];
m:=1;
end;

procedure find(k,x,y:longint);
var
xx,yy:longint;
begin
if a[k]<=x then
      if c[k]>=y then begin dec(all); exit; end;
if (x>=a[k])and(r[k]>0) then find(r[k],c[k],y);
if (x<a[k])and(y>c[k])and(r[k]>0) then begin inc(all); find(r[k],c[k],y); end;
if l[k]>0 then begin
             if y<=a[k]  then find(l[k],x,y);
             if (y>a[k])and(y<=c[k]) then find(l[k],x,a[k]);
             if (x<a[k])and(y>c[k]) then begin
                                         inc(all);
                                         find(l[k],x,a[k]);
                                         find(l[k],c[k],y);
                                         end;
             if y>c[k] then find(l[k],c[k],y);
             end;
if (r[k]>0)and(l[k]>0)and(x<a[k])and(y>c[k]) then dec(all);
end;

procedure insert(k,x,y:longint);
begin
if x>a[k]  then begin
           if r[k]=0 then begin inc(m);
                               a[m]:=x; c[m]:=y;
                               r[k]:=m; exit;
                          end else insert(r[k],x,y);
               end;
if x<=a[k] then begin
           if l[k]=0 then begin inc(m);
                                a[m]:=x; c[m]:=y;
                                l[k]:=m; exit;
                          end else insert(l[k],x,y);
               end;
end;

procedure main;
begin
for i:=n-1 downto 1 do
begin
 all:=1;
 find(1,p[i],q[i]);
 if all>=1 then insert(1,p[i],q[i]);
end; end;

begin
init;
main;
write(f2,m);
close(f1); close(f2);
end.