• HDU 6112 今夕何夕


    今夕何夕

    Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)
    Total Submission(s): 1501    Accepted Submission(s): 528


    Problem Description
    今天是2017年8月6日,农历闰六月十五。

    小度独自凭栏,望着一轮圆月,发出了“今夕何夕,见此良人”的寂寞感慨。

    为了排遣郁结,它决定思考一个数学问题:接下来最近的哪一年里的同一个日子,和今天的星期数一样?比如今天是8月6日,星期日。下一个也是星期日的8月6日发生在2023年。

    小贴士:在公历中,能被4整除但不能被100整除,或能被400整除的年份即为闰年。
     
    Input
    第一行为T,表示输入数据组数。

    每组数据包含一个日期,格式为YYYY-MM-DD。

    1 ≤ T ≤ 10000

    YYYY ≥ 2017

    日期一定是个合法的日期

     
    Output
    对每组数据输出答案年份,题目保证答案不会超过四位数。
     
    Sample Input
    3 2017-08-06 2017-08-07 2018-01-01
     
    Sample Output
    2023 2023 2024
     
    Source
    /*
    * @Author: lyuc
    * @Date:   2017-08-12 14:56:45
    * @Last Modified by:   lyuc
    * @Last Modified time: 2017-08-13 21:35:47
    */
    
    #include <stdio.h>
    #include <string.h>
    #include <iostream>
    #include <algorithm>
    #include <vector>
    #include <queue>
    #include <set>
    #include <map>
    #include <string>
    #include <math.h>
    #include <stdlib.h>
    #include <time.h>
    
    #define LL long long
    #define INF 0x3f3f3f3f
    
    using namespace std;
    
    int n;
    int y,m,d;
    int D;
    int cnt;
    
    bool IsLeap(int year)
    {
       return (year % 4 ==0 && year % 100 !=0) || year % 400 ==0;
    }
    
    int main(){
        // freopen("in.txt", "r", stdin);
        // freopen("out.txt", "w", stdout);
        scanf("%d",&n);
        while(n--){
            scanf("%d-%d-%d",&y,&m,&d);
            if(m==1){
                D=d;
                cnt=D;
            }else if(m==2){
                D=31+d;
                cnt=D;
            }else{
                D=13*(m+1)/5-7+(m-1)*28+d;
                cnt=D;
                if(IsLeap(y)==true)
                    D++;
            }
            int pos=((y-1)*365+(y-1)/4-(y-1)/100+(y-1)/400+D)%7;//蔡勒公式
    
            int i=y;
            while(i++){
                if(IsLeap(i)==false&&m==2&&d==29) continue;
                int res=(i-1)*365+(i-1)/4-(i-1)/100+(i-1)/400;
                if(IsLeap(i)==true&&m>=3){
                    res+=cnt+1;
                }else{
                    res+=cnt;
                }
                if(res%7==pos){
                    printf("%d
    ",i);
                    break;
                }
            }
        }
        return 0;
    }
     
  • 相关阅读:
    华为机试题01背包问题
    丑数
    动态规划(1)
    Linux 后台启动 Redis
    redis.exceptions.ResponseError: MISCONF Redis is configured to save RDB snapshots, but is currently not able to persist on disk.
    SQLServer从渣仔到小白
    cmder 增强型命令行工具
    总结在部署分布式爬虫环境过程中常见的若干问题
    【pymongo.errors】Cursor not found
    浅析scrapy与scrapy_redis区别
  • 原文地址:https://www.cnblogs.com/wuwangchuxin0924/p/7354945.html
Copyright © 2020-2023  润新知