Timus 1892 Morning in Koltsovo

来源:互联网 发布:广州中名软件 编辑:程序博客网 时间:2024/05/29 11:42

原题:Morning in Koltsovo
题意:给出n台要起飞的飞机及m台要降落的飞机,并给出他们起飞(降落)的时间,其中若一台飞机起飞,那么随后过t1秒后才允许下一台飞机起飞,或者过t2秒后允许下一台飞机降落;若一台飞机降落,那么随后过t3秒后才允许下一台飞机起飞,或过t4秒后允许下一台飞机降落。其中,若同一时间有飞机要起飞、降落,那么降落的飞机优先
解法:直接模拟。注意!其中若飞机 a 能被允许的起飞时间超过了飞机 b 初始的降落时间,哪怕飞机 a 的初始起飞时间比飞机 b 的初始降落时间要早,那么也是飞机 b 优先

#include <iostream>using namespace std;struct time {    int h, m, s;    void operator=(time& other) {        h = other.h;        m = other.m;        s = other.s;    }    bool operator<(time& other) {        if ((h < other.h) || (h == other.h && m < other.m)            || (h == other.h && m == other.m && s < other.s)) return true;        return false;    }    bool operator>(time& other) {        if ((h > other.h) || (h == other.h && m > other.m)            || (h == other.h && m == other.m && s > other.s)) return true;        return false;    }    bool operator==(time& other) {        if (h == other.h && m == other.m && s == other.s) return true;        return false;    }    void operator+=(int second) {        s += second;        m += s/60;        s = s%60;        h += m/60;        m = m%60;        h = h%24;    }};time a[200], ans[200];int b[200];int t1, t2, t3, t4, n, m;int main() {    cin >> t1 >> t2 >> t3 >> t4;    cin >> n;    char c;    for (int i = 1; i <= n; i++) {        cin >> a[i].h;        cin >> c;        cin >> a[i].m;        cin >> c;        cin >> a[i].s;        b[i] = i;    }    cin >> m;    for (int i = n+1; i <= n+m; i++) {        cin >> a[i].h;        cin >> c;        cin >> a[i].m;        cin >> c;        cin >> a[i].s;        b[i] = i;    }    for (int i = 1; i <= n; i++)        for (int j = i+1; j <= n; j++)            if (a[i] > a[j]) {                time temp = a[i];                a[i] = a[j];                a[j] = temp;                int t = b[i];                b[i] = b[j];                b[j] = t;            }    for (int i = n+1; i <= n+m; i++)        for (int j = i+1; j <= n+m; j++)            if (a[i] > a[j]) {                time temp = a[i];                a[i] = a[j];                a[j] = temp;                int t = b[i];                b[i] = b[j];                b[j] = t;            }    int x = 1, y = n+1;    time t; int state;    if (a[x] < a[y]) {        t = a[x];        x++;        state = 1;    } else {        t = a[y];        y++;        state = 2;    }    while (1) {        if (x > n && y > n+m) break;        time temp = t;        if (state == 1) temp += t1;        else temp += t3;        if (x <= n && temp < a[x]) temp = a[x];        if ((x <= n) && (y > n+m || temp < a[y])) {            a[x] = temp;            x++;            t = temp;            state = 1;        } else {            temp = t;            if (state == 1) temp += t2;            else temp += t4;            if (y <= n+m && temp < a[y]) temp = a[y];            a[y] = temp;            y++;            t = temp;            state = 2;        }    }    for (int i = 1; i <= n+m; i++)        ans[b[i]] = a[i];    for (int i = 1; i <= n+m; i++) {        if (ans[i].h < 10) cout << 0;        cout << ans[i].h << ":";        if (ans[i].m < 10) cout << 0;        cout << ans[i].m << ":";        if (ans[i].s < 10) cout << 0;        cout << ans[i].s << endl;    }}
0 0
原创粉丝点击