D.两情若是久长时 | 2018 校内选拔赛 预选赛 Day1

Description

纤云弄巧,飞星传恨,银汉迢迢暗度。
金风玉露一相逢,便胜却、人间无数。
柔情似水,佳期如梦,忍顾鹊桥归路。
两情若是久长时,又岂在、朝朝暮暮。

聪明的你,请帮助牛郎织女计算距离他们相会还有多少天。

Input

两行,每行为一个日期。
日期的格式是 yyyy-mm-dd
第一个日期代表当前日期
第二个日期代表牛郎织女可以相会的日期
输入保证日期范围在 1900 年 1 月 1 日至 2999 年 12 月 31 日之间

Output

如果牛郎织女可以相会,请输出距离他们相会还有多少天;
如果牛郎织女错过了相会日期,请输出“liang qing ruo shi jiu chang shi you qi zai zhao zhao mu mu”(双引号不输出)

Sample Input

1900-01-01
1900-01-01

Sample Output

0

Hint

将问题转化为计算日期到1900年1月1日的日期差,然后依据两个结果之差的正负性进行判断。

题解

#include "cstdio"
inline int query_days_for_year(int y)
{
    return (y % 400 == 0|| (y % 4 == 0 && y % 100 != 0)) ? 366 : 365;
}
inline int query_days_for_month(int m, int y)
{
    int arr[12] = {31, 31, (y % 400 == 0 || (y % 4 == 0 && y % 100 != 0)) ? 29 : 28, 31, 30, 31, 30, 31, 31, 30, 31, 30};
    return arr[m % 12];
}
int main()
{
    int days[2] = {0, 0};
    for (int T = 0; T < 2; T++)
    {
        int y, m, d;
        scanf("%d-%d-%d", &y, &m, &d);
        int delta_y = y - 1900;
        //add days of complete years
        for (int i = 1900; i < y; i++)
            days[T] += query_days_for_year(i);
        //add days of complete months
        for (int i = 1; i < m; i++)
            days[T] += query_days_for_month(i, y);
        //add days of days
        days[T] += d;
    }

    int res = days[1] - days[0];
    if (res >= 0)
        printf("%d\n", res);
    else
        printf("liang qing ruo shi jiu chang shi you qi zai zhao zhao mu mu\n");
    return 0;
}

CC BY-SA 4.0 D.两情若是久长时 | 2018 校内选拔赛 预选赛 Day1 by 小小泥娃 is licensed under a Creative Commons Attribution-ShareAlike 4.0 International License.

发表评论

This site uses Akismet to reduce spam. Learn how your comment data is processed.