题解详细介绍——注意陷阱
2024-03-29 13:05:53
发布于:湖北
6阅读
0回复
0点赞
周一周五才能算作桥假,其他时间不能产生桥假
如果注意到这一点,就能就搞定题目了
#include <bits/stdc++.h>
using namespace std;
int year[400];
int main()
{
char run;
int k,q;//一月一日是星期几,是否闰年
cin>>k>>run;
if(run=='N')q = 0;
if(run=='Y')q = 1;
int day[2][12] = {31,28,31,30,31, 30,31,31,30,31, 30,31,
31,29,31,30,31, 30,31,31,30,31, 30,31 };
/*
思路:把整年的用一个超大列表存起来,然后按照输入,把假期存到列表里面
按照Q,存入日期,然后找到对应的日期,存到列表里面
然后从第一天开始判断,某天不是节假日,并且是周一或者周五,它前后是节假日,那么这天就是桥假
*/
int n,m,d,lang;
cin>>n;
for(int i=0;i<n;i++)
{
cin>>m>>d>>lang;
//然后从这天开始
//计算从1月1日开始,这是第几天
int num = 0;
for(int i=0;i<m-1;i++)
{
num += day[q][i];
}
num += d;
while(lang)//把接下来的日期定为1
{
lang--;
year[num]=1;
num++;
//cout<<"--------"<<num<<"------";
}
}
int k_new = k;
for(int i=1;i<=365+q;i++)
{
if(k_new==6 || k_new==7)year[i]=1;
k_new++;
if(k_new>7)k_new=1;
}
int qj=0;
for(int i=1;i<=365+q;i++)
{
if(year[i]==0 && (k==1 || k==5))
{
if(year[i-1]==1 && year[i+1]==1)
qj++;
}
k++;
if(k==8)k=1;
}
cout<<qj<<endl;
return 0;
}
这里空空如也
有帮助,赞一个