讨论 / B. Y.进来一下,关于你SID=41题的问题
test 2008-10-19 02:21:00
点我顶贴 收藏 删除
你在RQNOJ上提交的SID=41那个题,我刚才看了一下,你出错的原因在于最后write了一个 ,所以就没有分了。

一定要注意细节问题,不要在数据的最后加上空格或者空行。

RQNOJ ---> RenQing

#1 lizhixin@2008-10-19 02:21:00
回复 删除
program n116;

var ans:array[0..10000]of longint;

nzz:array[0..30000]of boolean;

f,g,from,orz:array[0..30000]of longint;

n,i,m,j,my:longint;

begin

assign(input,’qq.in’);assign(output,’qq.out’);

reset(input);rewrite(output);

readln(n);

m:=0;

for i:=1 to n do

begin

readln(ans[i]);

if ans[i]>m then m:=ans[i];

end;

nzz[1]:=true;

for i:=2 to trunc(sqrt(m)) do

for j:=2 to m div i do nzz[i*j]:=true;

for i:=1 to m do if not nzz[i] then write(i,’ ’);

j:=0;

for i:=2 to m do

begin

if not nzz[i] then

begin

inc(j);

orz[j]:=i;

from[i]:=j;

end

else

from[i]:=j;

end;

f[1]:=-1;g[1]:=0; {f1=-1}

for i:=2 to m do

begin

if (not nzz[i]) or (not nzz[i-1]) then

begin

f[i]:=1;

continue;

end;

my:=123456789;

for j:=1 to from[i] do if (f[i-orz[j]]=-1) and (my>g[i-orz[j]]) then my:=g[i-orz[j]];

if my<>123456789 then f[i]:=my+1

else

begin

f[i]:=-1;

my:=-2;

for j:=1 to from[i] do

if (f[i-orz[j]]<>-1) and (my<f[i-orz[j]]) then my:=f[i-orz[j]];

f[i]:=my+1;

end;

end;

for i:=1 to n do writeln(f[ans[i]]);

close(input);close(output);

end.

查看更多回复
提交回复