Cod sursa(job #2420382)

Utilizator Petrisor98Anghel Ionut Petrisor Petrisor98 Data 11 mai 2019 18:01:37
Problema Taramul Nicaieri Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.02 kb
#include <fstream>
#include <cstring>
#include <vector>

using namespace std;

const int kNmax = 1005;

class Task {
 public:
	void show() {
		read_input();
		solve();
	}

 private:
	int n;
	int count = 0;
	int plecare[kNmax];
	int intoarcere[kNmax];
	
	vector<int> q[kNmax];
	int l[kNmax][kNmax];
	
	void read_input() {
		ifstream fin("in");
		fin >> n;
		for (int i = 1; i <= n; i++) {
			fin >> plecare[i];
			fin >> intoarcere[i];
			count += plecare[i];
		}
		
		fin.close();
	}
	
	void solve() {
		ofstream fout("out")
		fout << count << "\n";
		
		int i, j, k, ok;
		for (i = 1; i <= n; i++) {
			memset(q, 0, sizeof(q));
			for (j = 1; j <= n; j++) {
				if (intoarcere[j] && i != j) {
					l[intoarcere[j]][++q[intoarcere[j]]] = j;
				}
			}
			
			for (j = n ; j && plecare[i]; j--) {
				for (k = q[j]; k && plecare[i]; k--) {
					ok = l[j][k];
					plecare[i] --;
					intoarcere[ok] --;
					fout << i << " " << ok << "\n";
				}
			}
		}
	}
};

int main() {
	Task *task = new Task();
	task->show();
	delete task;
	return 0;
}