首页 > 其他 > 详细

CCF CSP 201503-3 节日

时间:2020-06-22 17:25:56      阅读:84      评论:0      收藏:0      [点我收藏+]

技术分享图片

code

#include<bits/stdc++.h>
#define N 1005
#define ll long long
#define mst(a,b) memset(a,b,sizeof(a))
using namespace std;

//1850-01-01 星期二 

//是否闰年 
int isLeapYear(int y){
	if(y % 400 == 0) return 1;
	if(y % 4 == 0 && y % 100 != 0) return 1;
	return 0;
}

int year[2051];  //记录每年的第一天是星期几 

//计算每年的第一天是星期几 
void firstDayOnYear(int y){
	int m = 365;
	mst(year, 0);
	year[1850] = 2;
	for(int i=1851; i<=y; i++){
		m = 365;
		if(isLeapYear(i - 1)) {
			m = 366;
		}
		m = (m - (7 - year[i-1])) % 7;
		if(m == 0) year[i] = 7;
			else year[i] = m;
		//cout<<i<<": "<<year[i]<<endl;
	}
}

int month[13] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};

// y年m月的第一天是星期几 
int firstDayOnMonth(int y, int m){
	month[2] = 28;
	int sum = 0;  //记录y年的前m-1个月有多少天 
	if(isLeapYear(y)) month[2] = 29;
	for(int j=1; j<m; j++){
		sum += month[j];
	}
	int day1; 
	if(sum == 0) day1 = year[y]; 
	else if((sum - (7 - year[y])) % 7) 
		day1 = (sum - (7 - year[y])) % 7;
	else day1 = 7;
	//cout<<y<<‘ ‘<<day1<<endl;
	return day1;
}

int main(){
	int a, b, c, y1, y2;
	cin >> a >> b >> c >> y1 >> y2;
	firstDayOnYear(y2);
	for(int i=y1; i<=y2; i++){
		int sum = 0;
		if(b>5) {
			cout<<"none\n";continue;
		} 
		int day1 = firstDayOnMonth(i, a); // i年a月的第一天是星期几 
		int day = c>=day1 ? (1+c-day1) : (8+c-day1);  //第一个星期c
		day += (b - 1) * 7; 
		if(day > month[a]) {
			cout<<"none\n";
			continue;
		}	
		//输出 	 printf("%d/%02d/%02d\n", i, a, day); //输出m位数,数位不足时用x补足:%xmd 
		cout<<i<<"/"; 
		if(a < 10) cout<<"0";
		cout<<a<<"/";
		if(day < 10) cout<<"0";
		cout<<day<<endl;
	} 
	return 0;
}

CCF CSP 201503-3 节日

原文:https://www.cnblogs.com/monster-yher/p/13177753.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!