传智杯校赛题解 | #这次还是躲不过蓝桥杯的日期问题吗#
这次还是躲不过蓝桥杯的日期问题吗
https://ac.nowcoder.com/acm/contest/70435/B
题目描述
我们规定一个日期可以用year-month-day的格式来表示:
例如2000年1月1日可以表示为2000-1-1。
如果一个日期是星期日,并且满足month < day,那我们就称这个日期是一个"好日期"。
请计算从1949年10月01日(星期六)到2023年11月26日(包含今天)共有多少个"好日期"?
需要考虑闰年
Solution
非常坑的大模拟(也许只是小模拟?)
不适合对 CSP-2020 儒略日、2020传智杯(练习赛) 儒略历 有心理阴影的选手食用
题目没挖坑,直接模拟答案即可,注意闰年判断的两种条件和 week=7 时的更新
赛时见到有手算的选手(很震撼)
代码
#include<iostream>
using namespace std;
int m[15]={0,31,28,31,30,31,30,31,31,30,31,30,31};
int check(int x){
if(x%400==0||(x%4==0&&x%100!=0)){
return 1;
}else{
return 0;
}
}
int main(){
int year=1949,month=10,day=1;
int week=6;
int ans=0;
while(true){
int flag=0;
int flag1=0;
if(check(year)){
flag1=1;
}
if(flag1&&month==2){
flag=m[month]+1;
}else{
flag=m[month];
}
if(week==7&&month<day){
ans++;
}
day++;
week++;
if(week>7){
week=week%7;
}
if(day>flag){
day=1;
month++;
}
if(month>12){
month=month%12;
year++;
}
flag1=0;
if(year==2023&&month==11&&day==27){
break;
}
}
cout<<ans;
return 0;
}