37分求助!

P2010 [NOIP2016 普及组] 回文日期

justinjia @ 2021-01-24 08:34:50

由于测试点内容比较复杂,所以我不得不用一下你们比较反感的\LaTeX,请原谅。

测试点信息:

\#1&\#2&\#3&\#4&\#5&\#6&\#7\\ \colorbox{red}{\color{white}WA}&\colorbox{green}{\color{white}AC}&\colorbox{red}{\color{white}WA}&\colorbox{green}{\color{white}AC}&\colorbox{green}{\color{white}AC}&\colorbox{red}{\color{white}WA}&\colorbox{darkblue}{\color{white}TLE}\\ \#8&\#9&\#10&\#11\\ \colorbox{darkblue}{\color{white}TLE}&\colorbox{darkblue}{\color{white}TLE}&\colorbox{darkblue}{\color{white}TLE}&\colorbox{green}{\color{white}AC} \end{matrix}

源代码:

#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 !!!???


|