P5690 题解
题目传送门
思路
这道题是一道分类讨论题。
首先对月的数字进行更改。如果
- 如果
\text{MM} 的十位为1 或个位为0 ,那么将\text{MM} 变为10 。这样做可以将\text{DD} 最大化为31 。 - 如果
\text{MM} 的个位数是2 ,那么将\text{MM} 变为12 。不将\text{MM} 变为2 的理由同上,因为12 月比2 的日期多,\text{DD} 的更改次数可以减少。 - 否则将
\text{MM} 变为它的个位所对应的月份,因为这是唯一可以只更改一位的解法。
既然月已经处理好了,对于天来说,如果它为
最后输出统计答案的次数即可。
AC CODE
#include<bits/stdc++.h>
using namespace std;
int read(){int x=0;char f=1,ch=getchar();while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}while(ch>='0'&&ch<='9')x=x*10+ch-'0',ch=getchar();return x*f;}
const int MON[]={0,31,28,31,30,31,30,31,31,30,31,30,31};
int main(){
int m=read(),d=read(),ans=0;
if(m>12||m<=0){
++ans;
if(m/10==1||m%10==0)
m=10;
else if(m%10==2)
m=12;
else m%=10;
}
if(d<=0||d>MON[m])
++ans;
printf("%d\n",ans);
return 0;
}