justinjia @ 2021-01-24 08:34:50
由于测试点内容比较复杂,所以我不得不用一下你们比较反感的
测试点信息:
源代码:
#include"stdio.h"
const int m_d[2][12]={
{31,28,31,30,31,30,31,31,30,31,30,31},//平年
{31,29,31,30,31,30,31,31,30,31,30,31}//闰年
};
struct date{
int y,m,d;
bool leap(void){
return y%4==0&&y%100!=0||y%400==0;
}
date operator+(int day){
date ans;
ans.y=y;
ans.m=m;
ans.d=d;
if(day<=m_d[leap()?1:0][m])
ans.d+=day;
while(day){
if(day<=m_d[leap()?1:0][m]){
ans.d+=day;
break;
}
ans.m++;
ans.d-=m_d[leap()?1:0][m];
}
while(ans.m>12){
ans.m-=12;
ans.y++;
}
return ans;
}
};
date int_date(int a){
date ans={0,0,0};
ans.d+=a%10;
a/=10;
ans.d+=a%10*10;
a/=10;
ans.m+=a%10;
a/=10;
ans.m+=a%10*10;
a/=10;
ans.y+=a%10;
a/=10;
ans.y+=a%10*10;
a/=10;
ans.y+=a%10*100;
a/=10;
ans.y+=a%10*1000;
return ans;
}
int date_int(date a){
int ans=0;
ans+=a.y;
ans*=100;
ans+=a.m;
ans*=100;
ans+=a.d;
return ans;
}
int main(void){
int a,b,ans=0;
date d1,d2;
scanf("%d%d",&a,&b);
d1=int_date(a);
d2=int_date(b);
for(date i=d1;i.y!=d2.y||i.m!=d2.m||i.d!=d2.d;i=i+1){
int in=date_int(i);
if(in/10000000==in%10&&in/1000000%10==in/10%10&&in/100000%10==in/100%10&&in/10000%10==in/1000%10)//判断回文
ans++;
}
printf("%d",ans);
return 0;
}
by justinjia @ 2021-01-24 08:36:01
提示:如果对代码有不明白的地方,可以向我询问。(我不太习惯加一大堆注释)
by CGDGAD @ 2021-01-24 08:42:35
对于
60\% 的数据,满足date1 = date2
您随便测一个有输出吗?
by _caiji_ @ 2021-01-24 08:50:17
u1s1,你直接贴个测试点链接都行
by devans @ 2021-01-24 08:56:05
您程序的时间复杂度是错误的,并且也有一些其他问题。例如:
20111102 20111102
10000101 99991231
by Argon_Cube @ 2021-01-24 13:24:14
@justinjia 这题我用了另一个程序打表
by justinjia @ 2021-01-24 13:25:53
@Unnamed_Cube !!!???