求大神指点(Pascal) 最后一个测试数据超时了

P2010 [NOIP2016 普及组] 回文日期

YeHao @ 2017-02-16 22:52:51

var
j,w,l,y,k,t,i:longint;
s:string;
flag:boolean;
begin
readln(w);
readln(l);
j:=0;
while w<=l do
begin
str(w,s);
if (s[1]=s[8]) and (s[2]=s[7]) and (S[3]=s[6]) and (s[4]=s[5])
then flag:=true
else flag:=false;
if flag then inc(j);
y:=w div 10000;
k:=w mod 10000 div 100;
t:=w mod 100;
case t of
28:if (y mod 4<>0) and (k=2) then
begin
k:=k+1;
t:=0;
end;
29:begin
if (((y mod 4=0) and (y mod 100<>0))
or (y mod 400=0)) and (k=2) then
begin
k:=k+1;
t:=0;
end;
end;
30:if (k=4) or  (k=6) or (k=9) or (k=11)
then begin
k:=k+1;t:=0;
end;
31:if k=12 then
begin
y:=y+1;k:=1;t:=0;
end
else begin
k:=k+1;
t:=0;
end;
end;
t:=t+1;
w:=y*10000+k*100+t;
end;
writeln(j);
end.

by Sweetlemon @ 2017-02-17 10:38:47

你的思路可能不对,要根据年份推断出月和日,再判断这个推断出来的日期是否合法。

如果枚举日期肯定要超时的哦!我当时在考场就写过一个枚举日期的程序,后来发现时间太长,就改成推断这样的了。


by Idontknow @ 2017-02-17 11:44:29

对,我记得最后一个是极端数据。


|