NOIP2016 第二题 回文日期

来源:互联网 发布:英雄联盟代练接单软件 编辑:程序博客网 时间:2024/06/05 06:59

题目:

这里写图片描述

题解:

我们可以先做出60%,这很简单:只要判断回文;
后40%判断日期。

代码:

var date1,date2,i,j,k,ans,t,y1,y2,m1,m2,d1,d2,xm,xd,ym,yd:longint;    a,y:array[0..13] of integer;procedure main(dt:longint);var t:boolean;    i:longint;begin  i:=0;  while dt>0 do    begin      inc(i);      a[i]:=dt mod 10;      dt:=dt div 10;    end;    t:=true;    for i:=1 to 4 do      if a[i]<>a[9-i] then t:=false;      if t=true then inc(ans);end;begin  read(date1);  read(date2);  ans:=0;  if date1=date2 then  begin    main(date1);    write(ans);  end else  begin    y1:=date1 div 10000; m1:=date1 div 100-y1*100; d1:=date1 mod 100;    y2:=date2 div 10000; m2:=date2 div 100-y2*100; d2:=date2 mod 100;    y[1]:=31; y[3]:=31; y[4]:=30; y[5]:=31; y[6]:=30;    y[7]:=31; y[8]:=31; y[9]:=30; y[10]:=31; y[11]:=30; y[12]:=31;    for i:=y1 to y2 do    begin      if (i mod 4=0)and(i mod 100<>0)or(i mod 4=0)and(i mod 400=0) then      y[2]:=29 else y[2]:=28;      if (i=y1)and(y1=y2) then begin xm:=m1;ym:=m2; end else      if i=y1 then begin xm:=m1; ym:=12; end else      if i=y2 then begin ym:=m2; xm:=1; end else      begin xm:=1; ym:=12; end;      for j:=xm to ym do      begin        if (i=y1)and(y1=y2)and(j=m1)and(m1=m2) then        begin xd:=d1;yd:=d2; end else        if (i=y1)and(j=m1) then begin xd:=d1; yd:=y[j]; end else        if (i=y2)and(j=m2) then begin yd:=d2; xd:=1; end else        begin xd:=1; yd:=y[j]; end;        for k:=xd to yd do        begin          t:=i*10000+j*100+k;          main(t);        end;      end;    end;    write(ans);  end;end.
2 0
原创粉丝点击