HDU 6112 今夕何夕 数论

今夕何夕

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


题意

给定一个合法日期如X年m月d日,询问这之后的哪一年m月d日和X年m月d日的星期几相同。

题解

基姆拉尔森计算公式:

W = (D + 2 * M + 3 * (M + 1) \ 5 + Y + Y \ 4 - Y \ 100 + Y \ 400) Mod 7

【预处理:当年的1月、2月转换至去年的13月、14月】

注意在计算2月29的时候先判断是否存在(跪在这里WA了3发)

代码

 1 //HDU-6112 copyright:scidylanpno
 2 #include<bits/stdc++.h>
 3 using namespace std;
 4
 5 int GetDay(int y,int m,int d){
 6
 7 if(m==1||m==2)  y-=1,m+=12;
 8     int ans=  (d+2*m+3*(m+1)/5+y+y/4-y/100+y/400) % 7;
 9     return ans;
10 }
11
12 void Run()
13 {
14     char str[20];
15     int y=0,m=0,d=0;
16     scanf("%s",str);
17     for(int i=0;i<4;i++)
18     {
19         y*=10;
20         y+=(str[i]-‘0‘);
21     }
22     for(int i=5;i<=6;i++)
23     {
24         m*=10;
25         m+=(str[i]-‘0‘);
26     }
27     for(int i=8;i<=9;i++)
28     {
29         d*=10;
30         d+=(str[i]-‘0‘);
31     }
32     int W=GetDay(y,m,d);
33     if(m==2&&d==29)
34         for(int Y=y+4;;Y+=4)
35         {
36             if((Y%400==0||(Y%4==0&&Y%100!=0))&&W==GetDay(Y,m,d))
37             {
38
39                 printf("%d",Y);
40                 return;
41             }
42         }
43
44     for(int Y=y+1;;Y++)
45     {
46         if(W==GetDay(Y,m,d))
47         {
48
49             printf("%d",Y);
50             return;
51         }
52     }
53 }
54
55 int main()
56 {
57     int T;
58     scanf("%d",&T);
59     while(T--)
60     {
61         Run();
62         //if(T)
63             printf("\n");
64     }
65     return 0;
66 }


题解链接:http://www.cnblogs.com/scidylanpno/p/7354392.html

版权所有:scidylanpno

时间: 2024-12-11 12:08:50

HDU 6112 今夕何夕 数论的相关文章

HDU 6112 今夕何夕 (这也要写??)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6112 题目大意:给你一个合法的年月日,问下次同样是这个月日,星期一样的最早是哪年? 题目保证不超过四位数. 解题思路:讲道理真的需要吗? 过一年+365天,如果是闰年+366天,对7取余为0了就OK了.不过判断地方稍微有点麻烦,需要考虑今天是2 29,小于2 29和大于的情况,也不复杂(那我咋没写出来???) 代码: 1 int y, m, d; 2 3 bool isleap(int x){ 4

【Zeller公式计算星期几】HDU 6112 今夕何夕

acm.hdu.edu.cn/showproblem.php?pid=6112 [思路] 公式计算即可,注意特判2月29号 Zeller公式里,计算出的week不能直接模7,要保证week是正数 [AC] 1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 #include<string> 5 #include<algorithm> 6 #include<cmath&g

hdu 6112 今夕何夕

今夕何夕 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 690    Accepted Submission(s): 211 Problem Description 今天是2017年8月6日,农历闰六月十五. 小度独自凭栏,望着一轮圆月,发出了"今夕何夕,见此良人"的寂寞感慨. 为了排遣郁结,它决定思考一个数学问题:接下来最近

hdu 6112 今夕何夕(模拟)

今夕何夕 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 484    Accepted Submission(s): 151 Problem Description 今天是2017年8月6日,农历闰六月十五. 小度独自凭栏,望着一轮圆月,发出了“今夕何夕,见此良人”的寂寞感慨. 为了排遣郁结,它决定思考一个数学问题:接下来最近的哪一年里

hdu 4196(数论)

题意:问小于n的数的乘积能拼成的最大平方数是多少? 思路:给n!做质数分解在除去指数为奇数的那些质数,由于题目中需要模运算所以不能直接除,必须乘上摸逆. 代码如下: 1 /************************************************** 2 * Author : xiaohao Z 3 * Blog : http://www.cnblogs.com/shu-xiaohao/ 4 * Last modified : 2014-06-28 15:26 5 * Fi

HDU 6122 今夕何夕 【数学公式】 (2017&quot;百度之星&quot;程序设计大赛 - 初赛(A))

今夕何夕 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 1295    Accepted Submission(s): 455 Problem Description 今天是2017年8月6日,农历闰六月十五. 小度独自凭栏,望着一轮圆月,发出了"今夕何夕,见此良人"的寂寞感慨. 为了排遣郁结,它决定思考一个数学问题:接下来最

hdu GuGuFishtion 6390 数论 欧拉函数

题目:http://acm.hdu.edu.cn/showproblem.php?pid=6390 直接开始证明: 我们设--------------.....-...............-----...(1) 则-................................-.-(2) 为什么是这样呢,因为我们知道 同理得到b的分解和的分解 我们会发现,虽然a和b的分解里可以有相等的部分,但是在里的也就是我们假设为的部分是不会有重复的,那么要由*得出也就是要去除重复部分,的重复部分就是

HDU 1495 非常可乐(数论,BFS)

非常可乐 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 14153    Accepted Submission(s): 5653 Problem Description 大家一定觉的运动以后喝可乐是一件很惬意的事情,但是seeyou却不这么认为.因为每次当seeyou买了可乐以后,阿牛就要求和seeyou一起分享这一瓶可乐,而且一定

hdu 5072 Coprime(数论)

题目链接:hdu 5072 Coprime 题目大意:给定N个数,问能选出多少个3元组,要么[(a, b) = (b, c) = (a, c) = 1] or [(a, b) ≠ 1 and (a, c) ≠ 1 and (b, c) ≠ 1]. 解题思路:这题可以换个角度想,可以将三个数看做三角形的三条边,互质即边的颜色为1,否则为0,那么要求的即为 三条边颜色相同的三角形有多少个. 总的三角形的个数可求,那么如果求出三条边不完全相同的三角形个数,相减一下即可. 枚举顶点,然后确定以该点形成的