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;
主程序中,用同样方法算出加号的个数及结果,得出答案。
为啥会超时?咋优化?
希望大家帮帮俺。。。
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.