题解:P2010 [NOIP2016 普及组] 回文日期

· · 题解

我们先用一个数组,把每月的日数存起来。

int a[13]={0,31,29,31,30,31,30,31,31,30,31,30,31};

枚举出后面的月份+日期,再把整个日期算出判断一下即可。

如果在范围内,计数器累加。

AC code

#include <bits/stdc++.h>
#define int long long
#define endl '\n'
using namespace std;
int a[13]={0,31,29,31,30,31,30,31,31,30,31,30,31};
int s,l,ans,x,res;
signed main(){
    cin.tie(0),cout.tie(0);
    ios::sync_with_stdio(0);
    scanf("%lld%lld",&s,&l);
    for(int i=1;i<=12;i++){
        for(int j=1;j<=a[i];j++){
            x=(j%10)*1000+(j/10)*100+(i%10)*10+i/10;
            res=x*10000+i*100+j;
            if(res<s||res>l){
                continue;
            }
            ans++;
        }
    }
    printf("%lld",ans);
    return 0;
}