40分求助,悬赏一关注

P2010 [NOIP2016 普及组] 回文日期

FS_qwq @ 2023-10-20 17:07:29

#include<bits/stdc++.h>
using namespace std;
string a,b,x,y,u,v,e,f;
int i,ans,c,d,c1,c2;
bool runnian(int n){//闰年判段 
    if((n%400==0)||(n%4==0&&n%100!=0))return true;
    else return false;
}
bool panduan(int n){
    int a=n/1000,b=(n/100)%10,c=((n/10)%100)%10,d=((n%1000)%100)%10;
    int k=d*10+c,t=b*10+a; 
    if(n==c){//如果是第一年或者最后一年 
        if(k<=c1){
            return false;
        }else return true;
    }else if(n==d){
        if(k>=c2){
            return false;
        }else return true;
    }
    if(1<=k&&k<=12&&1<=t&&t<=31){//开始判断回文日期是否满足要求 
        if(k==4||k==6||k==9||k==11)
            if(t<=30)return true;
        else if(k==1||k==3||k==5||k==7||k==8||k==10||k==12)
            if(t<=31)return true;
        else if(k==2){
            if(runnian(n)==true)
                if(t<=29)return true;
            else if(runnian(n)==false)
                if(t<=28)return true;
        }
    }
    return false;
}
int main(){
    cin>>a>>b;
    for(i=0;i<4;i++){//提取年份 
        x[i]=a[i];
        y[i]=b[i];
    }
    for(i=4;i<6;i++){//提取月份 
        u[i]=a[i];
        v[i]=b[i];
    }
    //年份,月份转为int类型 
    c=(x[0]-'0')*1000+(x[1]-'0')*100+(x[2]-'0')*10+(x[3]-'0');
    d=(y[0]-'0')*1000+(y[1]-'0')*100+(y[2]-'0')*10+(y[3]-'0'); 
    c1=(u[4]-'0')*10+(u[5]-'0');
    c2=(v[4]-'0')*10+(v[5]-'0');
    //遍历每一年进行判断 
    for(i=c;i<=d;i++){
        if(panduan(i)==true)ans++;
    }
    cout<<ans<<endl;
    return 0;
}

by dyc2022 @ 2023-10-20 17:25:21

这是去年被 ban 掉了的 CEOI 出题人吗????这好像是橙题,同志。


by FS_qwq @ 2023-10-20 17:27:46

@dyc2022 ?


|