Cod sursa(job #1376292)

Utilizator alexandru70Ungurianu Alexandru alexandru70 Data 5 martie 2015 16:57:26
Problema Grozavesti Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.06 kb
#include <fstream>
#include <vector>

using namespace std;

struct Inversion {
	Inversion(unsigned from, unsigned to) :
		from(from), to(to) {}
	unsigned from;
	unsigned to;
};

vector<Inversion> get_inversions(vector<unsigned> data) {
	vector<Inversion> inversions;
	for(int i = 0; i < data.size(); ++i) {
		for(int j = i+1; j < data.size(); ++j) {
			if(data[i] > data[j]) {
				inversions.push_back({i,j});
				swap(data[i],data[j]);
			}
		}
	}
	return inversions;
}

void print_inversions(ofstream &out, vector<Inversion> inversions) {
	out << inversions.size() << ' ';
	for(Inversion inversion:inversions) {
		out << "C " << inversion.from+1 << ' ' << inversion.to+1 << '\n';
		out << "L " << inversion.from+1 << ' ' << inversion.to+1 << '\n';
	}
}

int main() {
	ifstream in("grozavesti.in");
	ofstream out("grozavesti.out");

	unsigned n;
	in >> n;

	vector<unsigned> diagonal(n);

	for(int i = 0; i < n; ++i) {
		for(int j = 0; j < n; ++j) {
			int val;
			in >> val;
			if(i == j) {
				diagonal[i] = val;
			}
		}
	}
	print_inversions(out,get_inversions(diagonal));

	return 0;
}