比赛 |
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.