讨论 / 伤人自尊的WA80。。。。。。最后俩数据超时,求大牛指教,Fp的
董阴 2014-02-02 23:00:11
点我顶贴 收藏 删除
运行如下:

SID1039647 / 表达式求值 / UNACCEPTED 80

查看该题目

再次提交题目

由 董阴 在 2014-02-03 14:47:06 提交,有效耗时63ms,如果您发现任何评测错误,请点击这里提交

测试点1 Accepted / 7ms / 296kB

测试点2 Accepted / 6ms / 616kB

测试点3 Accepted / 7ms / 616kB

测试点4 Accepted / 12ms / 648kB

测试点5 Accepted / 8ms / 648kB

测试点6 Accepted / 5ms / 648kB

测试点7 Accepted / 11ms / 648kB

测试点8 Accepted / 7ms / 648kB

测试点9 Unaccepted / 选手程序运行超过时限

测试点10 Unaccepted / 选手程序运行超过时限

俺的程序太复杂,说一下思路:

函数ccc:把任意数字字符串改为一个小于10000的整数:

function ccc(s:ansistring):longint;

var q,w,e:longint;

begin

if length(s)>4 then

begin

w:=0;e:=1;

for q:=length(s) downto length(s)-3 do

begin

inc(w,(ord(s[q])-48)*e);e:=e*10;

end;

ccc:=w;

end

else

begin

w:=0;e:=1;

for q:=length(s) downto 1 do

begin

inc(w,(ord(s[q])-48)*e);e:=e*10;

end;

ccc:=w;

end;

end;

函数fo:把不含加号的字符串算出结果,就是像34*435*113,5726*4,3这样的字符串算出后四位:

function fo(s8:ansistring):longint;

var s:ansistring;

i,j,ans:longint;

begin

s:='*'+s8+'*';ans:=1;

for i:=1 to length(s)-2 do

if s[i]='*' then

for j:=i+2 to length(s) do

if s[j]='*' then

begin

ans:=(ans*ccc(copy(s,i+1,j-i-1)))mod 10000;

break;

end;

fo:=ans;

end;

主程序中,用同样方法算出加号的个数及结果,得出答案。

为啥会超时?咋优化?

希望大家帮帮俺。。。

#1 zyf111@2015-11-02 04:13:47
回复 删除
var i,j,k,l,n,m:longint;

c:char;

begin

k:=0;i:=1;j:=0;

while not eoln do

begin

read(c);

case c of

'+':begin k:=(k+i*j) mod 10000;i:=1;j:=0;end;

'*':begin i:=i*j mod 10000;j:=0; end;

'0'..'9':begin j:=(j*10+ord(c)-48) mod 10000 end;

end; end;

writeln((k+i*j) mod 10000);

end.

查看更多回复
提交回复