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;
}
posted @ 2021-12-15 21:34  Eason_AC  阅读(301)  评论(0)    收藏  举报