Cod sursa(job #2421161)

Utilizator mihaicivMihai Vlad mihaiciv Data 14 mai 2019 13:19:50
Problema Taramul Nicaieri Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 2.5 kb
#include <iostream>
#include <fstream>
#include <vector>
#define NMAX 1000

using namespace std;

ifstream f("harta.in");
ofstream g("harta.out");

int n, interior[NMAX], exterior[NMAX];

int a[NMAX][NMAX];

struct nod {
    int ex, in, pos;

}nodeArray[NMAX], nodeArray1[NMAX], nodeArray2[NMAX];


void copiere(nod n1[]) {
    for (int i = 0; i < n; ++i) {
        n1[i].ex = nodeArray[i].ex;
        n1[i].in = nodeArray[i].in;
        n1[i].pos = nodeArray[i].pos;
    }
}

void sort1(nod n1[]) {
    for (int i = 0; i < n; ++i) {
        for (int j = i + 1; j < n; ++j) {
            if (n1[i].ex < n1[j].ex) {
                nod aux;
                aux = n1[i];
                n1[i] = n1[j];
                n1[j] = aux;
            }
        }
    }
}

void sort2(nod n1[]) {
    for (int i = 0; i < n; ++i) {
        for (int j = i + 1; j < n; ++j) {
            if ( (n1[i].in < n1[j].in) || (n1[i].in == n1[j].in && n1[i].ex < n1[j].ex) ) {
                nod aux;
                aux = n1[i];
                n1[i] = n1[j];
                n1[j] = aux;
            }
        }
    }
}

int main() {

    f >> n;
    int s = 0;
    for (int i = 0; i < n; ++i) {
        f >> nodeArray[i].ex >> nodeArray[i].in;
        nodeArray[i].pos = i;
        s = s + nodeArray[i].ex;
    }

    copiere(nodeArray1);
    copiere(nodeArray2);

    sort1(nodeArray1);
    sort2(nodeArray2);

    for (int i = 0; i < n; ++i) {
        int cnt = 0;
        for (int j = 0; nodeArray1[0].ex != 0; ++j) {
            if (nodeArray1[0].pos != nodeArray2[j].pos) {
                a[nodeArray1[0].pos][nodeArray2[j].pos] = 1;
                nodeArray1[0].ex --;
                nodeArray2[j].in --;
                nodeArray[nodeArray1[0].pos].ex --;
                nodeArray[nodeArray2[j].pos].in --;
            }
        }

        /*for (int j = 0; j < n; ++j) {
            cout << nodeArray[j].ex << ' ' << nodeArray[j].in << "\n";
        }
        cout << "\n";*/

        copiere(nodeArray1);
        copiere(nodeArray2);

        sort1(nodeArray1);
        sort2(nodeArray2);

        /*for (int j = 0; j < n; ++j) {
            cout << nodeArray1[j].ex << ' ' << nodeArray1[j].in << "\n";
        }
        cout << "\n";*/
    }

    g << s << "\n";
    for (int i = 0; i < n; ++i) {
        for (int j = 0; j < n; ++j) {
            if (a[i][j]) {
                g << i + 1 << " " << j + 1 << "\n";
            }
        }
    }

    return 0;
}