大佬求助,暴力枚举,30分

P2010 [NOIP2016 普及组] 回文日期

AC_bee @ 2023-08-11 22:35:22

#include<bits/stdc++.h>
using namespace std;
int a1,a2,a3,a4,a5,a6,a7,a8,a;
int b1,b2,b3,b4,b5,b6,b7,b8,b;
int ans,sum;
bool zs(int aa1,int aa2,int aa3,int aa4,int aa5,int aa6,int aa7,int aa8){
    if(aa1==aa8 && aa2==aa7 && aa3==aa6 && aa4==aa5){
        return true;
    }
    return false;
}
int main(){
    cin>>a>>b;
    a8=a%10;
    a=a/10;
    a7=a%10;
    a=a/10;
    a6=a%10;
    a=a/10;
    a5=a%10;
    a=a/10;
    a4=a%10;
    a=a/10;
    a3=a%10;
    a=a/10;
    a2=a%10;
    a=a/10;
    a1=a%10;
    b8=b%10;
    b=b/10;
    b7=b%10;
    b=b/10;
    b6=b%10;
    b=b/10;
    b5=b%10;
    b=b/10;
    b4=b%10;
    b=b/10;
    b3=b%10;
    b=b/10;
    b2=b%10;
    b=b/10;
    b1=b%10;
    while(!(a1==b1 && a2==b2 && a3==b3 && a4==b4 && a5==b5 && a6==b6 && a7==b7 && a8==b8)){
        if(zs(a1,a2,a3,a4,a5,a6,a7,a8)==true) ans++;
        a8++;
        if(a8==10){
            a8=0;
            a7++;
        }
        if((a5==1 && a6==2) || (a5==0 && a6==1) || (a5==0 && a6==3) || (a5==0 && a6==5) || (a5==0 && a6==7) || (a5==0 && a6==8) || (a5==1 && a6==0)){
            if(a7==3 && a8==1){
                a7=0;
                a8=0;
                a6++;
            }
        }
        else if((a5==0 && a6==4) || (a5==0 && a6==6) || (a5==0 && a6==9) || (a5==1 && a6==1)){
            if(a7==3 && a8==0){
                a7=0;
                a8=0;
                a6++;
            }
        }
        else if(a5==0 && a6==2){
            sum=a1*1000+a2*100+a3*10+a4;
            if(a3==0 && a4==0){
                sum=sum%400;
                if(sum==0){
                    if(a7==2 && a8==9){
                        a7=0;
                        a8=0;
                        a6++;
                    }
                }
                else {
                    if(a7==2 && a8==8){
                        a7=0;
                        a8=0;
                        a6++;
                    }
                }
            }
            else {
                sum=sum%4;
                if(sum==0){
                    if(a7==2 && a8==9){
                        a7=0;
                        a8=0;
                        a6++;
                    }
                }
                else {
                    if(a7==2 && a8==8){
                        a7=0;
                        a8=0;
                        a6++;
                    }
                }
            }
        } 
        if(a6==10){
            a6=0;
            a5++;
        }
        if(a5==1 && a6==2){
            a5=0;
            a6=0;
            a4++;
        }
        if(a4==10){
            a4=0;
            a3++;
        }
        if(a3==10){
            a3=0;
            a2++;
        }
        if(a2==10){
            a2=0;
            a1++;
        }
    }
    cout<<ans;
    return 0;
}

by C202301 @ 2023-08-16 16:21:45

枚举每年的回文数再判断这个回文数的日期是否真实


|