1 条题解

  • 0
    @ 2066-11-23 13:16:38

    【例82.1】不吉利日期

    解题思路

    把1月1日星期转换0~6,逐月维护该月1日星期。该月13日比1日晚12天,星期为(start+12)%7,若是周五输出月份,再按该月天数推进下月。

    正确性说明

    依照上述推导,逐步维护已处理部分的有效状态。每一步都完成当前项的贡献且不改变已确定的次序,结束时输出的状态恰好对应题目要求。

    易错点

    本年保证非闰,二月固定28天。

    复杂度

    固定12月,时间O(1),空间O(1)。

    参考代码(C++11)

    #include <bits/stdc++.h>
    using namespace std;
    
    int main() {
        ios::sync_with_stdio(false);
        cin.tie(nullptr);
        int w;
        cin >> w;
        int start = w - 1;
        int days[] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
        for (int m = 1; m <= 12; m++) {
            if ((start + 12) % 7 == 4)
                cout << m << "\n";
            start = (start + days[m - 1]) % 7;
        }
        return 0;
    }
    
    • 1

    信息

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