测评机: 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就算了】
能过的话会给悬赏的。
这个~~~~~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.
谢谢学哥~~!
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:我不知道怎么给悬赏了...
a[k]*10 因为你压位,就是对于数组里每一个数,都是以万进制存的,就是数组里每一个数都保证《=10000;所以预处理的时候,要把前面的数*10,就是在后面天一个0,再加上个位