1 条题解

  • 0
    @ 2026-10-19 0:36:26

    [CSP-S 2019 江西] 日期

    知识点

    枚举、字符串、日期处理

    解题思路

    枚举平年的每个合法月日,格式化为MM-DD,与输入按位比较,取最少不同字符数。

    正确性说明

    任何最终合法日期都在365个枚举目标中。变为某目标恰需修改不同的数字位置,因此对所有合法目标取最小值就是全局最优。

    易错点

    2月固定28天,不允许02-29;保留前导零;月份或日期为00、99时仍参与正常比较。

    复杂度

    固定枚举365天,每次比较5位,时间和额外空间均为O(1)。

    参考代码(GNU C++17)

    #include<bits/stdc++.h>
    using namespace std;
    int main(){ios::sync_with_stdio(false);cin.tie(nullptr);string s;cin>>s;int days[]={0,31,28,31,30,31,30,31,31,30,31,30,31},ans=4;for(int m=1;m<=12;m++)for(int d=1;d<=days[m];d++){char t[6];snprintf(t,6,"%02d-%02d",m,d);int z=0;for(int i=0;i<5;i++)z+=s[i]!=t[i];ans=min(ans,z);}cout<<ans<<'\n';}
    
    • 1

    信息

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