LuoguP5690 [CSP-S2019 江西] 日期 题解
Content
Alice 在纸上写下了一个日期,形式为 \(\text{MM-DD}\),其中 \(\text{MM}\) 与 \(\text{DD}\) 都是两位数字,分别表示月和天,然而这个日期并不一定存在。Alice 找来了 Bob 要他更改若干位上的数字,使得这个日期存在。请你帮 Bob 算算他最少需要更改几位数字。
本题默认 2 月 28 天。
Solution
分离 \(\text{MM}\) 和 \(\text{DD}\) 的两个数位,然后枚举一年 \(365\) 天的所有日期,看修改成哪个日期修改的次数最小即可,足以通过此题。
Code
const int month[13] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
int main() {
int a, b, ans = 10;
scanf("%d-%d", &a, &b); //利用 scanf 按格式输入的特性
F(int, m, 1, 12) F(int, d, 1, month[m]) {
int a1 = a / 10, a2 = a % 10, b1 = b / 10, b2 = b % 10;
int m1 = m / 10, m2 = m % 10, d1 = d / 10, d2 = d % 10;
ans = min(ans, (a1 != m1) + (a2 != m2) + (b1 != d1) + (b2 != d2));
}
return println(ans), 0;
}

浙公网安备 33010602011771号