zoukankan      html  css  js  c++  java
  • ZZNU 2055(基姆拉尔森计算公式)

    题目链接

    题意:

    比如今天是2017年8月16日,星期三。下一个也是星期三的8月16日发生在2023年。

    现在是日期是yyyy-mm-dd,我们希望你求出薛定谔会跳跃到那一年。

    题解:

    emmmm....强哉队花,科普“基姆拉尔森计算公式”,之后特判下闰年这题就能水过了:

    W= (d+2*m+3*(m+1)/5+y+y/4-y/100+y/400+1)%7 
    在公式中d表示日期中的日数,m表示月份数,y表示年数。
    注意:在公式中有个与其他公式不同的地方:
    把一月和二月看成是上一年的十三月和十四月,例:如果是2004-1-10则换算成:2003-13-10来代入公式计算。
     

    AC代码:

    #include <stdio.h>
    #include <stdlib.h>
    #include <cmath>
    #include <string.h>
    #include <iostream>
    #include <algorithm>
    #include <queue>
    #include <vector>
    #include <string>
    #include <ctype.h>
    //******************************************************
    #define lrt (rt*2)
    #define rrt  (rt*2+1)
    #define LL long long
    #define inf 0x3f3f3f3f
    #define pi acos(-1.0)
    #define exp 1e-8
    //***************************************************
    #define eps             1e-8
    #define inf             0x3f3f3f3f
    #define INF             2e18
    #define LL              long long
    #define ULL             unsigned long long
    #define PI              acos(-1.0)
    #define pb              push_back
    #define mk              make_pair
    
    #define all(a)          a.begin(),a.end()
    #define rall(a)         a.rbegin(),a.rend()
    #define SQR(a)          ((a)*(a))
    #define Unique(a)       sort(all(a)),a.erase(unique(all(a)),a.end())
    #define min3(a,b,c)     min(a,min(b,c))
    #define max3(a,b,c)     max(a,max(b,c))
    #define min4(a,b,c,d)   min(min(a,b),min(c,d))
    #define max4(a,b,c,d)   max(max(a,b),max(c,d))
    #define max5(a,b,c,d,e) max(max3(a,b,c),max(d,e))
    #define min5(a,b,c,d,e) min(min3(a,b,c),min(d,e))
    #define Iterator(a)     __typeof__(a.begin())
    #define rIterator(a)    __typeof__(a.rbegin())
    #define FastRead        ios_base::sync_with_stdio(0);cin.tie(0)
    #define CasePrint       pc('C'); pc('a'); pc('s'); pc('e'); pc(' '); write(qq++,false); pc(':'); pc(' ')
    #define vi              vector <int>
    #define vL              vector <LL>
    #define For(I,A,B)      for(int I = (A); I < (B); ++I)
    #define FOR(I,A,B)      for(int I = (A); I <= (B); ++I)
    #define rFor(I,A,B)     for(int I = (A); I >= (B); --I)
    #define Rep(I,N)        For(I,0,N)
    #define REP(I,N)        FOR(I,1,N)
    using namespace std;
    const int maxn=1e5+10;
    int Isyear(int y)
    {
        if( y%400==0 || (y%4==0&&y%100!=0) ) return 1;
        else return 0;
    }
    int Day(int y,int m,int d)
    {
        if(m==1 || m==2)  m+=12,y-=1;
        return (d+2*m+3*(m+1)/5+y+y/4-y/100+y/400+1)%7;
    }
    int main()
    {
        FastRead;
        int t,d,m,y;;
        cin>>t;
        while(t--)
        {
            int w,w2;
            char ch1,ch2;
            cin>>y>>ch1>>m>>ch2>>d;
            w=Day(y,m,d);
            w2=(d+2*m+3*(m+1)/5+y+y/4-y/100+y/400+1)%7;
            if(m==2&&d==29)
            {
                while(1)
                {
                    y++;
                    if(Isyear(y))
                    {
                        w2=Day(y,m,d);
                        if(w2==w)   break;
                    }
                }
            }
            else
            {
                while(1)
                {
                    y++;
                    w2=Day(y,m,d);
                    if(w2==w)   break;
                }
            }
            cout<<y<<endl;
        }
        return 0;
    }
     
  • 相关阅读:
    javaweb学习总结(五)——Servlet开发(一)
    机器学习(1)2017.3.2
    Java中三种变量
    Java中javadoc注释使用规则 转
    java中main函数的位置必须在public class类中么? (eclipse,editplus环境下)
    【C++】 私有成员变量的理解
    怕忘了
    隐写命令方法总结-(研究生创新联盟高校首届研究生网络与信息安全技术大赛)
    kali源
    几款chrome扩展和应用
  • 原文地址:https://www.cnblogs.com/weimeiyuer/p/7522243.html
Copyright © 2011-2022 走看看