var
a,b,c,d:array[1..30000] of longint;
i,j,m,n,O,k,x,y,l:longint;
procedure qsort(l,h:integer);
var
q,w,t,z:integer;
begin
q:=l;
w:=h;
z:=a[(l+h)div 2];
repeat
while a[q]<z do inc(q);
while z<a[w] do dec(w);
if q<=w then
begin
t:=a[q];
a[q]:=a[w];
a[w]:=t;
t:=b[q];
b[q]:=b[w];
b[w]:=t;
inc(q);
dec(w);
end;
until q>w;
if q<h then qsort(q,h);
if w>l then qsort(l,w);
end;
begin
readln(l,m);
j:=0;
k:=1;
for i:=1 to m do
readln(a[i],b[i]);
qsort(1,m);
i:=1;
c[1]:=a[1];
d[1]:=d[1];
i:=0;
k:=1;
c[1]:=a[1];
d[1]:=b[1];
repeat
begin
inc(i);
x:=a[i];
y:=b[i];
O:=k;
for j:=1 to o do
begin
if (y>d[j]) and (x<d[j]) then d[j]:=y;
if x>d[j] then begin
inc(k);
c[k]:=x;
d[k]:=y;
end;
end;
end;
until i=m;
for i:=1 to k do
begin
l:=l-(d[i]-c[i]);
end;
writeln(l);
end.
只过了80,我的思路是:读入数据后排序(排序起点),分析终点,若终点已在储存的区间中不做处理,若不在则更新.
第1,2个测试点无法过.
看题解的:
program ex;
var
i,j,k,l,x,y,a,b,m,n,s,t:longint;
c:array[0..10000]of boolean;
begin
read(a,b);
for i:=0 to a do
c[i]:=true;
for k:=1 to b do
begin
read(x,y);
for n:=x to y do
if (c[n]=true) then
c[n]:=false;
end;
m:=0;
for j:=0 to a do
if c[j]=true then
m:=m+1;
write(m);
end.
program xmwds;
var
a: array[0..10000] of boolean;
l,m,x,y,i,j,k:longint;
begin
read(l,m);
k:=0;
fillchar(a,sizeof(a),true);
for i:= 1 to m do
begin
read(x,y);
for j:=x to y do
a[j]:=false;
end;
for i:=0 to l do
if a[i] then k:=k+1;
write(k);
end.
这是我做的,不知咋样,给个评价吧!