讨论 / 有哪位大牛是压四位高精过的。我的程序为什么过不去。?悬赏
Vilaboke 2010-08-12 16:59:00
点我顶贴 收藏 删除
状态: Unaccepted

测评机: Xeond[6]

得分: 0分

提交日期: 2010-8-9 16:37:00

有效耗时: 该状态没有记录

测试结果1: 输出过少|用户输出数据少于标准输出的50%[标准输出2000位|选手输出510位]

测试结果2: 输出过少|用户输出数据少于标准输出的50%[标准输出2000位|选手输出510位]

测试结果3: 输出过少|用户输出数据少于标准输出的50%[标准输出2000位|选手输出510位]

测试结果4: 输出过少|用户输出数据少于标准输出的50%[标准输出2000位|选手输出510位]

测试结果5: 输出过少|用户输出数据少于标准输出的50%[标准输出40000位|选手输出510位]

测试结果6: 输出过少|用户输出数据少于标准输出的50%[标准输出40000位|选手输出510位]

测试结果7: 输出过少|用户输出数据少于标准输出的50%[标准输出39999位|选手输出509位]

测试结果8: 输出过少|用户输出数据少于标准输出的50%[标准输出40000位|选手输出510位]

测试结果9: 输出过少|用户输出数据少于标准输出的50%[标准输出40000位|选手输出510位]

测试结果10: 输出过少|用户输出数据少于标准输出的50%[标准输出40000位|选手输出510位]

program chengfa;

const n=20000;

type ar=array [1..20002] of longint;

var a,b:ar; w,k1,k2,k:longint;

c:array [1..40004] of longint;

s1,s2:string;

procedure fenge(s:string;var d:ar; var kk:longint);

var ss:string;

i,code:longint;

begin

i:=length(s); kk:=n;

repeat

ss:=copy(s,i-3,4);

val(ss,d[kk],code);

kk:=kk-1;

s:=copy(s,1,i-4);

i:=i-4;

until i<0;

kk:=kk+1;

end;

procedure init;

var i:longint;

begin

for i:=1 to n do begin a[i]:=0; b[i]:=0; end;

for i:=1 to 2*n do c[i]:=0;

readln(w); readln(s1); readln(s2);

fenge(s1,a,k1); fenge(s2,b,k2);

end;

procedure jisuan;

var i,j,m:longint; x,y,z,jw:longint;

begin

i:=n; k:=2*n;

repeat

x:=b[i]; z:=0; m:=k; jw:=0;

for j:=n downto k1 do

begin

y:=a[j];

z:=c[m];

x:=x*y+z+jw;

jw:=x div 10000;

c[m]:=x mod 10000;

m:=m-1;

x:=b[i];

end;

if jw<>0 then c[m]:=jw else m:=m+1;

i:=i-1; k:=k-1;

until i<k2;

k:=m;

end;

procedure daying;

var i:longint;

begin

write(c[k]);

for i:=k+1 to 2*n do

begin

if c[i]<1000 then write('0');

if c[i]<100 then write('0');

if c[i]<10 then write('0');

write(c[i]);

end;

end;

begin

init;

jisuan;

daying;

end.

如果大牛懒得看程序的话可以发个代码。【C就算了】

能过的话会给悬赏的。

#1 zhang1in@2010-08-09 01:52:00
回复 删除

#2 dsqwwe@2010-08-09 03:11:00
回复 删除
这个

这个~~~~~so easy

program yw;

type

numbyte=array[0..40000] of longint;

var

i,j,x,l,k:longint;

a,b,c:numbyte;

d:array[0..40000] of char;

f:boolean;

begin

assign(input,'yw.in');

reset(input);

assign(output,'yw.out');

rewrite(output);

readln(l);

for i:=1 to l do

read(d[i]);

a[0]:=l div 4;

if l mod 4<>0 then inc(a[0]);

for i:=1 to l do

begin

k:=(l-i) div 4+1;;

a[k]:=a[k]*10+ord(d[i])-48;

end;

readln;

b[0]:=a[0];

for i:=1 to l do

read(d[i]);

for i:=1 to l do

begin

k:=(l-i) div 4+1;

b[k]:=b[k]*10+ord(d[i])-48;

end;

for i:=1 to a[0] do

begin

x:=0;

for j:=1 to b[0] do

begin

x:=c[i+j-1]+a[i]*b[j]+x div 10000;

c[i+j-1]:=x mod 10000;

end;

c[i+j]:=x div 10000;

end;

l:=i+j;

while (c[l]=0) and (l<>1) do dec(l);

c[0]:=l;

f:=false;

write(c[c[0]]);

for i:=c[0]-1 downto 1 do

write(c[i] div 1000,(c[i] mod 1000) div 100,((c[i] mod 1000) mod 100) div 10,c[i] mod 10);

close(input);

close(output);

end.

#3 Vilaboke@2010-08-09 04:36:00
回复 删除
回复 板凳dsqwwe 的帖子

谢谢学哥~~!

for i:=1 to l do

begin

k:=(l-i) div 4+1;;

a[k]:=a[k]*10+ord(d[i])-48;

end;

这句什么意思呃。为什么是(l-i) div 4+1?

还有a[k]为什么要先乘10?

PS:我不知道怎么给悬赏了...

#4 dsqwwe@2010-08-12 16:59:00
回复 删除
(l-i) div 4+1 是一个公式,你可以手工模拟一下,这样可以保证对于每一个数,都是四位一存,对于开头不足四位的也可以处理掉

a[k]*10 因为你压位,就是对于数组里每一个数,都是以万进制存的,就是数组里每一个数都保证《=10000;所以预处理的时候,要把前面的数*10,就是在后面天一个0,再加上个位

查看更多回复
提交回复