E-睡大觉_2022河南萌新联赛第(四)场:郑州轻工业大学 (nowcoder.com)
题意:
思路:
这是一道模拟题,这里主要总结如何处理时间信息和日期信息
对于时间信息:把时分秒转化成秒,相当于哈希了一下
对于日期信息:
开两个Mon数组,一个表示闰年,一个表示非闰年
日期进位的话,一层一层判断,然后更新日期信息即可
Code:
#include <bits/stdc++.h>
using namespace std;
int year,mon,day,q,h,m,s,last=0,ok=0,ans=0;
int Monr[13]={0,31,29,31,30,31,30,31,31,30,31,30,31};
int Mon[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
bool check(int y){
if((y%4==0&&y%100!=0)||y%400==0) return true;
return false;
}
int main(){
scanf("%d-%d-%d",&year,&mon,&day);
if(check(year)) ok=1;
scanf("%d",&q);
while(q--){
scanf("%d:%d:%d",&h,&m,&s);
int w=s+m*60+h*3600;
if(w<=last){
day++;
if(ok){
if(day>Monr[mon]){
day=1;
mon++;
if(mon>12){
mon=1;
year++;
if(check(year)) ok=1;
else ok=0;
}
}
}else{
if(day>Mon[mon]){
day=1;
mon++;
if(mon>12){
mon=1;
year++;
if(check(year)) ok=1;
else ok=0;
}
}
}
}
//printf("%d %d %d\n",year,mon,day);
if(mon%2==day%2) ans++;
last=w;
}
printf("%d\n",ans);
}
但是有点丢人的是,这道题并不是1A的....,甚至还WA了两发
第一发是ok(判断闰年)=0的判断没写
第二发是发现只需要醒来的时候奖励就好了,一开始不需要ans++
因此对于模拟题,我们写完代码之后,一定要看一遍题干,然后顺着题干的逻辑从头到尾检查一下代码,一点点仔细看,debug的时候也是,一点点检查,看看全局变量有没有漏维护的(这个弱智错误我经常犯,不论是robocom还是PAT....,只要是涉及到一丢丢的模拟的地方我都会错一点,拿不到满分),所以提交之前和debug的时候一定要顺着读一遍题干,理一下代码逻辑QWQ
debug一般有两种途径:
1.仔细读题,然后顺着理一遍
2.输出一点东西,调小样例
3.写暴力代码,然后对拍,看看能不能拍出小数据