範例程式碼 uva380

//uva380
#include <cstdio>
#include <cstring>
#include <iostream>
#include <vector>

using namespace std;

class ele {
public:
    int time, target, end;
    ele() : time(0), target(0), end(0) {}
    ele(int time, int duration, int target) {
        this->time = time;
        this->target = target;
        this->end = time + duration;
    }
};
vector<ele> phone[10000];
bool isCalled[10000];

int TryCall(int time, int source) {
    isCalled[source] = true;
    for (int i = 0; i < phone[source].size(); ++i) {
        if (phone[source][i].time <= time && time <= phone[source][i].end) {
            if (isCalled[phone[source][i].target])
                return 9999;
            return TryCall(time, phone[source][i].target);
        }
    }
    return source;
}

int main() {
    cout << "CALL FORWARDING OUTPUT" << endl;
    int N;
    int cas = 0;
    cin >> N;

    while (N--) {
        cout << "SYSTEM " << ++cas << endl;
        int source, time, duration, target;
        for (int i = 0; i < 10000; ++i)
            phone[i].clear();

        while (cin >> source && source) {
            cin >> time >> duration >> target;
            phone[source].push_back(ele(time, duration, target));
        }
        while (cin >> time && time != 9000) {
            cin >> source;
            memset(isCalled, false, sizeof(isCalled));
            printf("AT %04d CALL TO %04d RINGS %04d\n", time, source, TryCall(time, source));
        }
    }

    cout << "END OF OUTPUT" << endl;
    return 0;
}