1 条题解

  • 1
    @ 2024-4-10 0:32:35

    【2020年省赛B组】试题D: 跑步锻炼

    题解

    答案为:8879

    简单模拟题。

    主要解决两个问题:

    • 是否为月初
    • 是否是周天

    我们可以枚举从2000年1月1日到2020年10月1日的所有日期: 用y,m,dy, m, d分别表示当前枚举的年,月和日, 那么当d=1d=1为月初,否则不为月初。问题1解决。

    同时我们定义weekweek表示当前日期所对应的日期, 这样下一个日期所对应的日期就为(week+1)(week+1)。当week=1week = 1时为周一,否则不为周一。问题2解决。 最后模拟一下即可(注意判断闰年),答案为8879

    #include<bits/stdc++.h>
    using namespace std;
    int D[13];
    bool check(int y){
        if(y % 400 == 0 || (y % 4 == 0 && y % 100 != 0)) return true;
        return false;
    }
    signed main()
    {
        D[1] = 31 , D[2] = 28 , D[3] = 31 , D[4] = 30 , D[5] = 31 , D[6] = 30;
        D[7] = 31 , D[8] = 31 , D[9] = 30 , D[10] = 31 , D[11] = 30 , D[12] = 31;
        int ans = 0 , week = 6;
        for(int y = 2000 ; y <= 2020 ; y ++){
            if(check(y)) D[2] = 29;
            else D[2] = 28;
            for(int m = 1 ; m <= (y == 2020 ? 10 : 12) ; m ++){
                if(y == 2020 && m == 10) D[m] = 1;
                for(int d = 1 ; d <= D[m] ; d ++){
                    if(week == 1 || d == 1) ans += 2;
                    else ans += 1;
                    week = (week + 1) % 7;
                }
            }
        }
        cout << ans << '\n';
        return 0;
    }
    
    
    • 1

    信息

    ID
    999
    时间
    1000ms
    内存
    256MiB
    难度
    3
    标签
    递交数
    13
    已通过
    7
    上传者