Pagini recente » Cod sursa (job #824131) | Cod sursa (job #1526889) | Cod sursa (job #274788) | Cod sursa (job #258321) | Cod sursa (job #2421163)
#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;
}