Cod sursa(job #3188312)

Utilizator georgeilie4542Ilie George georgeilie4542 Data 2 ianuarie 2024 17:10:42
Problema Taramul Nicaieri Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.3 kb
#include <fstream>
#include <vector>
#include <utility>

using namespace std;

vector<pair<int, int>> determina_drumuri(int N, vector<pair<int, int>>& orase) {
    vector<int> drumuri_plecare(N), drumuri_sosire(N);
    for (int i = 0; i < N; ++i) {
        drumuri_plecare[i] = orase[i].first;
        drumuri_sosire[i] = orase[i].second;
    }

    vector<pair<int, int>> drumuri;

    for (int i = 0; i < N; ++i) {
        while (drumuri_plecare[i] > 0) {
            for (int j = 0; j < N; ++j) {
                if (drumuri_sosire[j] > 0 && i != j) {
                    drumuri.push_back({i + 1, j + 1});
                    drumuri_plecare[i]--;
                    drumuri_sosire[j]--;
                    break;
                }
            }
        }
    }

    return drumuri;
}

int main() {
    ifstream fin("harti.in");
    ofstream fout("harti.out");

    int N;
    fin >> N;
    vector<pair<int, int>> orase(N);

    for (int i = 0; i < N; ++i) {
        fin >> orase[i].first >> orase[i].second;
    }

    vector<pair<int, int>> drumuri = determina_drumuri(N, orase);

    fout << drumuri.size() << endl;
    for (const auto& drum : drumuri) {
        fout << drum.first << " " << drum.second << endl;
    }

    fin.close();
    fout.close();

    return 0;
}