• CCF CSP 201503-3 节日


    思路:

    1.先计算1850年a月1日星期几,然后往后算一直到y1年a月1日星期几,跨年时注意月份,如果是三月往后,则每次跨年计算需要判断下一年是不是闰年,否则判断当前年是不是闰年;
    2.定位到y1年a月1日星期几后,需要判断星期c在不在本周,然后采用不同的式子计算;

    代码:

    #include<bits/stdc++.h>
    using namespace std;
    typedef pair<int,int> p;
    typedef long long ll;
    #define isOp(x,y) ((x^y)<0)
    #define mem(a,x) memset(a,x,sizeof(a))
    #define m_p(a,b) make_pair(a,b)
    #define p_b(a) push_back(a)
    #define rp(i,n) for(int i=0;i<n;i++)
    #define rpn(i,n) for(int i=1;i<=n;i++)
    #define l_b(a,n,x) lower_bound(a,a+n,x)-a
    #define u_b(a,n,x) upper_bound(a,a+n,x)-a
    int mon[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
    bool isLeap(const int y){
    	return (!(y%400))||(y%100&&!(y%4));
    }
    int main(){
    	int a,b,c,y1,y2;
    	cin>>a>>b>>c>>y1>>y2;
    	int p=0;
    	for(int i=1;i<a;i++) p+=mon[i];
    	p=(p+1)%7;//1850年a月1日是星期p+1
    	int flag=(a>=3)?1:0;
    	for(int i=1850;i<y1;i++){
    		p+=365+(isLeap(i+flag)?1:0);
    	}
    	while(y1<=y2){
    		p%=7;//y1年a月1日是星期p+1
    		int day;
    		if(c<p+1) day=7*b-p+c;
    		else day=7*b-p+c-7;
    		mon[2]=isLeap(y1)?29:28;
    		if(day<=mon[a]) printf("%d/%02d/%02d
    ",y1,a,day);
    		else puts("none");
    		p+=365+(isLeap(y1+flag)?1:0);	
    		y1++;			
    	} 
    	return 0;
    }
    
  • 相关阅读:
    Websocket基础知识简记
    jmeter websocket接口测试
    软件测试的艺术 笔记(上)
    错误提示Unable to preventDefault inside passive event listener解决方法
    vue-cil3关闭eslint语法检查
    mongoDB无法启动服务器
    Vue之todoList
    react踩坑第一章
    父组件向孙子组件传值(Context)特性
    变量声明
  • 原文地址:https://www.cnblogs.com/yuhan-blog/p/12308900.html
Copyright © 2020-2023  润新知