Cod sursa(job #1845651)

Utilizator Mircea_DonciuDonciu Mircea Mircea_Donciu Data 11 ianuarie 2017 19:07:15
Problema Interclasari Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.3 kb
#include <fstream>

using namespace std;
int n,k,i,j,x,s,v[21][1000005];
struct vec
{
    int a,b,c,d;
};
vec w[25];
void urca(int p)
{
    while(p!=1&&w[p].a<w[p/2].a)
    {
        swap(w[p],w[p/2]);
        p/=2;
    }
}
void coboara(int p)
{
    int fiu;
    fiu=2*p;
    if(fiu<=x)
    {
        if(fiu<x&&w[fiu].a>w[fiu+1].a) fiu++;
        if(w[p].a>w[fiu].a)
        {
            swap(w[p],w[fiu]);
            coboara(fiu);
        }
    }
}
int main()
{
    ifstream f("interclasari.in");
    ofstream g("interclasari.out");
    f>>k;
    for(i=1; i<=k; i++)
    {
        f>>n;
        s+=n;
        for(j=1; j<=n; j++) f>>v[i][j];
        v[i][0]=n;
        if(n)
        {
            x++;
            w[x].a=v[i][1];
            w[x].b=1;
            w[x].c=i;
            w[x].d=n;
            urca(x);
        }
    }
    g<<s<<'\n';
    while(x)
    {
        g<<w[1].a<<" ";
        if(w[1].b<w[1].d)
        {
            w[1].b++;
            w[1].a=v[w[1].c][w[1].b];
            coboara(1);
        }
        else
        {
            w[1].a=w[x].a;
            w[1].b=w[x].b;
            w[1].c=w[x].c;
            w[1].d=w[x].d;
            x--;
            coboara(1);
        }
    }
    f.close(); g.close();
    return 0;
}