讨论 / 求教,请高手指点第13题
pansheng3789 2013-07-29 06:37:00
点我顶贴 收藏 删除
var

a:array[0..10000]of boolean;

n,m,i,j,k,x,y:integer;

begin

a[0]:=true;

fillchar(a,10000,true);

readln(n,m);k:=0;

for i:=1 to m do

begin

readln(x,y);

for j:=x to y do a[j]:=false;

end;

for i:=0 to n do

if a[i] then k:=k+1;

write(k);

end.

为什么只能通过前面3个测试数据?

#1 yangdong@2010-05-21 02:39:00
回复 删除
lz

我刚才试了下,fillchar那句有问题

fillchar(a,10000,true)

这里的10000 只包含了0..9999这10000个元素。

改成sizeof(a) 就行了

那句a[0]:=true也可以省了

换句话说10000不能填充完这10001个元素

(*我在win下运行fillchar(a,10001,true)发现程序是对的,不过提交了发现输出了300位还多。。不知道是不是评测机的问题。。)

#2 WAharo@2010-08-05 19:36:00
回复 删除
#include"stdio.h"

main()

{

int a[10001]={0},i,j,h,r,m,n,o=0;

scanf("%d%d",&m,&n);

for(i=0;i<n;i++)

{

scanf("%d%d",&h,&r);

for(j=h;j<=r;j++)

a[j]=1;

}

for(i=0;i<=m;i++)

if(a[i]==0)

o++;

printf("%d",o);

getchar();

getchar();

}

#3 贾垒铭@2013-07-29 06:37:00
回复 删除
回复 楼主pansheng3789 的帖子

给你说说我的思路吧,设一个数组,只存0和1,,0表示没树,1表示有树,一开始全段路全是1,然后对应修铁路的地方变成0,搞个累加器,累加‘1’出现的次数就行;

你那个我看不懂fillchar,我才初一,前天学的数组;附我的满分源码,效率一般,但超短易懂:

program a1;

var m,n,i,j,x:integer;

a,b,c:array[0..10000] of integer;

begin

read(m,n);

for i:=0 to m do a[i]:=1;

for i:=1 to n do read(b[i],c[i]);

for i:=1 to n do

for j:=b[i] to c[i] do a[j]:=0;

for i:=0 to m do

if a[i]=1 then X:=x+1;

writeln (x);

end.

求采纳,万分感谢...................

#4 GJF2014@2014-08-24 18:26:45
回复 删除
Pascal代码?回复 #3 贾垒铭:
查看更多回复
提交回复