1 条题解

  • 0
    @ 2026-10-26 22:20:37

    思路与算法

    枚举四位年份,反转年份确定唯一月日后验证真实日期、闰年和闭区间;不是枚举整数回文或普通日期差。

    按上述模型建立状态或枚举对象,依代码中的顺序处理输入并输出完整答案。

    正确性说明

    八位回文的后四位由年份前四位唯一决定,故每个可能年份仅有一个候选且无重复。合法月日、闰年和闭区间检查恰好筛出真实满足条件的日期。

    复杂度

    枚举固定9000年,O(9000)时间、O(1)额外空间,含月天数表初始化。

    易错点

    月份或日期可能由反转产生0;先检查月份再访问数组。世纪年须再检查400整除。

    参考代码(C++11)

    #include <bits/stdc++.h>
    using namespace std;
    int main() {
        int a, b;
        cin >> a >> b;
        int ans = 0;
        for (int y = 1000; y <= 9999; y++) {
            int t = y, v = y;
            for (int k = 0; k < 4; k++) {
                v = v * 10 + t % 10;
                t /= 10;
            }
            int m = v / 100 % 100, d = v % 100;
            int days[] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
            days[2] += y % 400 == 0 || (y % 4 == 0 && y % 100 != 0);
            if (v >= a && v <= b && m >= 1 && m <= 12 && d >= 1 && d <= days[m])
                ans++;
        }
        cout << ans << "\n";
    }
    
    • 1

    信息

    ID
    1889
    时间
    1000ms
    内存
    256MiB
    难度
    进阶
    标签
    递交数
    0
    已通过
    0
    上传者