80分,两个超时,求提速改进!

P2010 [NOIP2016 普及组] 回文日期

pompeiiking @ 2024-11-29 21:27:32

#include<bits/stdc++.h>

using namespace std;

struct date{
    int day;
    int month;
    int year;
};
int search(string a)
{
    for(int i=0;i<8;i++)
    {
        int j=7-i;
        if(a[i]!=a[j])  return 0;
    }
    return 1;
}
int main()
{
    int cntmax=0;
    string dayto;
    string monthto;
    string beg;
    string en;
    vector<int> q={0,31,28,31,30,31,30,31,31,30,31,30,31};

    cin>>beg;
    cin>>en;

    date fir;
    fir.year=stoi(beg.substr(0,4));
    fir.month=stoi(beg.substr(4,2));
    fir.day=stoi(beg.substr(6,2));
    // cout<<fir.day<<endl;

    date secn;
    secn.year=stoi(en.substr(0,4));
    secn.month=stoi(en.substr(4,2));
    secn.day=stoi(en.substr(6,2));
    // cout<<secn.month<<endl;

    string firt;
        if(fir.day<10) dayto='0'+to_string(fir.day);
        else dayto=to_string(fir.day);

        if(fir.month<10) monthto='0'+to_string(fir.month);
        else monthto=to_string(fir.month);

        firt=to_string(fir.year)+monthto+dayto;

    string secnd;
        if(secn.day<10) dayto='0'+to_string(secn.day);
        else dayto=to_string(fir.day);

        if(secn.month<10) monthto='0'+to_string(secn.month);
        else monthto=to_string(secn.month);

        secnd=to_string(secn.year)+monthto+dayto;
    // cout<<firt<<endl<<secnd<<endl;
    if(search(firt)==1) cntmax++;
    while(firt!=secnd)
    {
        int cnt=0;
        if(fir.year%4==0 && fir.year%100!=0 || fir.year%400==0) 
        {
            q[2]=29;
        }
        else q[2]=28;
        fir.day++;
        if(fir.day>q[fir.month]) 
        {
            fir.day=1;
            fir.month++;
        }
        if(fir.month>12)
        {
            fir.month=1;
            fir.year++;
        }

        if(fir.day<10) dayto='0'+to_string(fir.day);
        else dayto=to_string(fir.day);

        if(fir.month<10) monthto='0'+to_string(fir.month);
        else monthto=to_string(fir.month);

        firt=to_string(fir.year)+monthto+dayto;
        // cout<<firt<<endl;

        if(search(firt)==1) cntmax++;
    }

    cout<<cntmax;
}

|