百度之星2017初赛A-1005-今夕何夕
Posted zzq
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了百度之星2017初赛A-1005-今夕何夕相关的知识,希望对你有一定的参考价值。
今夕何夕
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 719 Accepted Submission(s): 228
Problem Description
今天是2017年8月6日,农历闰六月十五。
小度独自凭栏,望着一轮圆月,发出了“今夕何夕,见此良人”的寂寞感慨。
为了排遣郁结,它决定思考一个数学问题:接下来最近的哪一年里的同一个日子,和今天的星期数一样?比如今天是8月6日,星期日。下一个也是星期日的8月6日发生在2023年。
小贴士:在公历中,能被4整除但不能被100整除,或能被400整除的年份即为闰年。
小度独自凭栏,望着一轮圆月,发出了“今夕何夕,见此良人”的寂寞感慨。
为了排遣郁结,它决定思考一个数学问题:接下来最近的哪一年里的同一个日子,和今天的星期数一样?比如今天是8月6日,星期日。下一个也是星期日的8月6日发生在2023年。
小贴士:在公历中,能被4整除但不能被100整除,或能被400整除的年份即为闰年。
Input
第一行为T,表示输入数据组数。
每组数据包含一个日期,格式为YYYY-MM-DD。
1 ≤ T ≤ 10000
YYYY ≥ 2017
日期一定是个合法的日期
每组数据包含一个日期,格式为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
注意如果给出的年份是闰年且是二月二十九号,则要判断一下当前的年份是不是闰年,不是的话即使日期相同,但这天不存在!坑死我
1 #include<bits/stdc++.h> 2 using namespace std; 3 struct MyDate 4 { 5 int year; 6 int month; 7 int day; 8 }; 9 bool isr(int r){return r%4==0 && r%100!=0 || r%400==0;} 10 int GetAbsDays(MyDate x) 11 { 12 int i; 13 int month_day[] = {31,28,31,30,31,30,31,31,30,31,30,31}; 14 int year = x.year-1; 15 int days = year * 365 + year/4 - year/100 + year/400; 16 if(isr(x.year)) month_day[1]++; 17 for(i=0; i<x.month-1; i++) 18 days += month_day[i]; 19 days += x.day-1; 20 return days; 21 } 22 int GetDiffDays(MyDate a, MyDate b) 23 { 24 return GetAbsDays(b) - GetAbsDays(a); 25 } 26 int main() 27 { 28 int T,n,m,i,j; 29 cin>>T; 30 while(T--){MyDate A,B; 31 int Y,M,D,W; 32 char a,b; 33 scanf("%d-%d-%d",&Y,&M,&D); 34 A.year=Y; 35 A.month=M; 36 A.day=D; 37 B=A; 38 for(;;){ 39 B.year++; 40 if(A.month==2&&A.day==29) 41 { 42 if(!isr(B.year)) continue; 43 } 44 int W2=GetDiffDays(A,B); 45 if(W2%7==0){cout<<B.year<<endl;break;} 46 } 47 } 48 return 0; 49 }
以上是关于百度之星2017初赛A-1005-今夕何夕的主要内容,如果未能解决你的问题,请参考以下文章
HDU 6122 今夕何夕 数学公式 (2017"百度之星"程序设计大赛 - 初赛(A))
2017"百度之星"程序设计大赛 - 初赛(A)-1001.小C的倍数问题(HDU6108) 1005.今夕何夕-蔡勒公式 (HDU6112)