Cod sursa(job #629588)

Utilizator Teodor94Teodor Plop Teodor94 Data 3 noiembrie 2011 15:48:50
Problema Interclasari Scor 100
Compilator cpp Status done
Runda gc_practice Marime 1.08 kb
#include <cstdio>
#include <vector>
#include <queue>
#include <algorithm>

using namespace std;

const int N = 22;

vector <int> a[N];

// priority_queue<tip, vector<tip>, functie> nume;
priority_queue<pair<int, int>, vector<pair<int, int> >, greater<pair<int, int> > > heap;

int k, s, nr[N];

void citire() {
    scanf("%d", &k);

    int n, x;

    for (int i = 1; i <= k; ++i) {
        scanf("%d", &n);

        s += n;

        for (int  j = 1; j <= n; ++j) {
            scanf("%d", &x);
            a[i].push_back(x);
        }
    }
}

void rez() {
    for (int i = 1; i <= k; ++i) {
        if (a[i].size() > 0)
            heap.push(make_pair(a[i][0], i));
        nr[i] = 0;
    }

    printf("%d\n", s);

    for (int i = 1; i <= s; ++i) {
        printf("%d ", heap.top().first);

        int poz = heap.top().second;
        heap.pop();
        if (++nr[poz] < a[poz].size())
            heap.push(make_pair(a[poz][nr[poz]], poz));
    }
}

int main() {
    freopen("interclasari.in", "r", stdin);
    freopen("interclasari.out", "w", stdout);

    citire();

    rez();

    return 0;
}