编号 题目 状态 分数 总时间 内存 代码 / 答案文件 提交者 提交时间
#47137 #112. czq的时间间隔 Accepted 100 14 ms 408 K C++ 11 / 1.9 K 计试001陈子鹏 2021-02-01 22:30:05
显示原始代码
#include <iostream>
using namespace std;

typedef long long LL;
const LL LINF = 0x3f3f3f3f3f3f3f3f;
const int INF = 0x3f3f3f3f;

int month[13] = { 0, 31, 0, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };

bool leap(int year) {
    if (year % 4 || (!(year % 100) && year % 400))
        return false;
    return true;
}

bool goodtime(int year, int mth, int day, int hour, int min, int scd) {
    if (year <= 0 || mth <= 0 || mth > 12 || day <= 0 || day > 31 || hour < 0 || hour > 23 || min < 0 ||
        min > 59 || scd < 0 || scd > 59)
        return false;
    if (leap(year))
        month[2] = 29;
    else
        month[2] = 28;
    if (month[mth] < day)
        return false;
    return true;
}

LL Time(int year, int mth, int day, int hour, int min, int scd) {
    LL ans = 0;
    if (leap(year))
        month[2] = 29;
    else
        month[2] = 28;
    while (year > 400) {
        year -= 400;
        ans += (400 * 365 + 97);
    }
    while (year > 100) {
        year -= 100;
        ans += (100 * 365 + 24);
    }
    while (year > 4) {
        year -= 4;
        ans += (4 * 365 + 1);
    }
    ans += (year - 1) * 365;
    for (int i = 1; i < mth; i++) {
        ans += month[i];
    }
    ans += (day - 1);
    ans *= 24;
    ans += hour;
    ans *= 60;
    ans += min;
    ans *= 60;
    ans += scd;
    return ans;
}

int main() {
    int T;
    int year, mth, day, hour, min, scd;
    LL ans, T1, T2;
    scanf("%d", &T);
    while (T--) {
        scanf("%d/%d/%d %d:%d:%d", &year, &mth, &day, &hour, &min, &scd);
        if (!goodtime(year, mth, day, hour, min, scd)) {
            printf("-1\n");
            scanf("%d/%d/%d %d:%d:%d", &year, &mth, &day, &hour, &min, &scd);
            continue;
        }
        T1 = Time(year, mth, day, hour, min, scd);
        scanf("%d/%d/%d %d:%d:%d", &year, &mth, &day, &hour, &min, &scd);
        if (!goodtime(year, mth, day, hour, min, scd)) {
            printf("-1\n");
            continue;
        }
        T2 = Time(year, mth, day, hour, min, scd);
        ans = T1 - T2;
        if (ans < 0)
            ans = -ans;
        printf("%lld\n", ans);
    }
    return 0;
}
子任务 #1
Accepted
得分:100
测试点 #1
Accepted
得分:100
用时:3 ms
内存:400 KiB

输入文件(1.in

14
2020/08/22 23:48:00 2020/08/22 23:48:59
2020/08/22 23:48:59 2020/08/22 23:48:00
2020/08/22 23:22:
<463 bytes omitted>

答案文件(1.out

59
59
1537
82527
1032927
21164127
17902896185
-1
-1
-1
-1
-1
-1
315537897599

用户输出

59
59
1537
82527
1032927
21164127
17902896185
-1
-1
-1
-1
-1
-1
315537897599

系统信息

Exited with return code 0
测试点 #2
Accepted
得分:100
用时:11 ms
内存:408 KiB

输入文件(2.in

10000
5348/13/26 20:09:36 5809/10/09 11:17:33
8951/13/09 02:54:35 1245/10/20 19:37:36
7524/01/04 20:
<399906 bytes omitted>

答案文件(2.out

-1
-1
52181193949
167527773820
11151421677
176367406636
34137847390
71087537213
156479412870
<102130 bytes omitted>

用户输出

-1
-1
52181193949
167527773820
11151421677
176367406636
34137847390
71087537213
156479412870
-1
-1
81508312928
163816674890
-1
6
<92102 bytes omitted>

系统信息

Exited with return code 0