工作时长

标题:工作时长 | 时间限制:1秒 | 内存限制:262144K | 语言限制:不限
小明上班打卡时间为AA:BB, 下班打卡时间为CC:DD,请问小明上班时长?(注:中午12:00到14:00为午休时间,18:00到19:00是晚餐时间,不计入工作时长。)

#include<iostream>
#include<string>

using namespace std;

int cros(int a1, int a2, int b1, int b2) {
    if (a2 <= b1) {
        return 0;
    }
    if (b1 >= a1 && b1 <= a2 && a2 <= b2) {
        return a2 - b1;
    }
    if (b1 >= a1 && a2 >= b2) {
        return b2 - b1;
    }
    if (a1 >= b1 && a2 <= b2) {
        return a2 - a1;
    }
    if (a1 <= b2 && a2 >= b2) {
        return b2 - a1;
    }
    return 0;
}

int main() {
    string a;
    string b;
    cin>>a>>b;
    int H1 = stoi(a.substr(0, 2));
    int M1 = stoi(a.substr(3, 2));
    int H2 = stoi(b.substr(0, 2));
    int M2 = stoi(b.substr(3, 2));
    
    int a1 = H1 * 60 + M1;
    int a2 = H2 * 60 + M2;
    if (a2 < a1) {
        a2 += 24 * 60;
    }
    
    int ans = a2 - a1;
    ans -= cros(a1, a2, 12 * 60, 14 * 60);
    ans -= cros(a1, a2, 18 * 60, 19 * 60);
    
    int H = ans / 60;
    int M = ans % 60;
    
    if (H < 10) {
        cout<<"0";
    }
    cout<<to_string(H)<<":";
    if (M < 10) {
        cout<<"0";
    }
    cout<<to_string(M);
    return 0;
}

int f() {
    int H1, H2, M1, M2;
    if (H1 < 12 && H2 < 14) {
        H2 = 12;
    } else if (H1 < 12 && H2 > 14 && H2 < 18) {
        H2 = H2 - 2;
    } else if (H1 < 12 && H2 > 18 && H2 < 19) {
        H2 = 18 - 2;
    } else if (H1 < 12 && H2 > 19) {
        H2 = H2 - 3;
    }
    
    if (H1 > 12 && H1 < 14) {
        H1 = 14;
    }
    
    if (H2 > 18 && H2 < 19) {
        H2 = 18;
    }
    
    int H = 0;
    int M = 0;
    if (M2 >= M1) {
        H = H2 - H1;
        M = M2 - M1;
    } else {
        M = M2 + 60 - M1;
        H = H2 - 1 - H1;
    }
    
    if (H < 10) {
        cout<<"0";
    }
    cout<<to_string(H)<<":";
    if (M < 10) {
        cout<<"0";
    }
    cout<<to_string(M);
    return 0;
}


全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务