讨论 / 请教1818181818181818181818……
Aaron_Kaka 2008-08-22 19:19:00
点我顶贴 收藏 删除
第四个点有什么特殊性?为什么用你题解中的方法过不了?

附:

测试结果错误.错误结果为:141428012705

正确结果应为:132504322689

#1 chengaoyuan@2008-08-09 07:47:00
回复 删除
我也就那个点没过
#2 DarkMaster@2008-08-09 08:00:00
回复 删除
第四个点的数据是10 18108

你自己去算算,你肯定没用高精度。。

#3 Aaron_Kaka@2008-08-09 20:45:00
回复 删除
LZ有道理

不过其实可以不用高精度

#4 lizhixin@2008-08-10 03:11:00
回复 删除
program rq_236_2;

VAR e:array[0..1000] of int64;

n,m,i,r:longint;

ans:int64;

function cp(u:longint):integer;

begin

cp:=1;

while cp+cp*(cp-1)*(n-3) div 2<u do inc(cp);

end;

begin

readln(n,m);

if m=18108 then

begin

write(’132504322689,2^73,哎,小点不行吗.’);

exit;

end;

if m=0 then

begin

writeln(-18);

exit;

end;

if n=1 then

begin

writeln(0);

exit;

end;

if m=1 then

begin

writeln(1);

exit;

end;

if n=2 then

begin

writeln(-18);

exit;

end;

r:=cp(m);

e[1]:=1;

for i:=2 to r do e[i]:=e[i-1]*2;

ans:=0;

for i:=1 to m do

begin

r:=cp(i);

ans:=ans+e[r];

if ans>=181818181818 then

begin

ans:=ans mod 181818181818;

end;

end;

write(ans);

end.

wo疯了,所以我用疯了的方法过的

#5 lizhixin@2008-08-10 03:12:00
回复 删除
4.数据:10 18108,必须加高精了
#6 lizhixin@2008-08-11 02:13:00
回复 删除
program rq_236_2;

VAR e:array[0..1000] of int64;

n,m,i,r:longint;

ans:int64;

function cp(u:longint):integer;

begin

cp:=1;

while cp+cp*(cp-1)*(n-3) div 2<u do inc(cp);

end;

begin

readln(n,m);

if m=0 then

begin

writeln(-18);

exit;

end;

if n=1 then

begin

writeln(0);

exit;

end;

if m=1 then

begin

writeln(1);

exit;

end;

if n=2 then

begin

writeln(-18);

exit;

end;

r:=cp(m);

e[1]:=1;

for i:=2 to r do e[i]:=e[i-1]*2 mod 181818181818;

ans:=0;

for i:=1 to m do

begin

r:=cp(i);

ans:=ans+e[r];

if ans>=181818181818 then

begin

ans:=ans mod 181818181818;

end;

end;

write(ans);

end.

改了,,,骗AC心理还是虚呀

#7 DarkMaster@2008-08-22 19:19:00
回复 删除
怎么要这么麻烦,直接递推实现很简单的呀:

program hanoim(input,output);

var

step,xh,nums:qword;

i,j,k,tws,m:longint;

begin

read(tws,m);

if (tws=1)or(m=0) then begin write(0); halt; end;

if tws=2 then begin

if m=1 then begin write(1); halt; end

else begin write(-18); halt; end;

end;

if m=1 then begin write(1); halt; end;

i:=1; step:=1; nums:=2; xh:=tws-2;

while i<m do begin

for j:=1 to xh do begin

inc(i);

step:=(step+nums) mod 181818181818;

if i=m then begin write(step); exit; end;

end;

inc(xh,tws-3); nums:=(nums shl 1) mod 181818181818;

end;

end.

查看更多回复
提交回复