讨论 / 校门外的树:求检查程序错误
harder 2010-11-13 03:03:00
点我顶贴 收藏 删除
program xunmenshu;

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个测试点无法过.

#1 legolas@2010-11-01 03:28:00
回复 删除
数据定义成int64试试,任青总干这事。。。。。

别都定成int64啊,空间太大

#2 落汤鸡二号@2010-11-03 04:27:00
回复 删除
回复 楼主harder 的帖子

看题解的:

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.

#3 落汤鸡二号@2010-11-03 04:29:00
回复 删除
回复 沙发legolas 的帖子

其实不用int64也可以,用长整型(Longint)就行。

#4 我无语了@2010-11-13 03:03:00
回复 删除
打酱油的。。。。。。

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.

这是我做的,不知咋样,给个评价吧!

查看更多回复
提交回复