Pagini recente » Cod sursa (job #48516) | Cod sursa (job #2216834) | Cod sursa (job #1530242) | Cod sursa (job #229704) | Cod sursa (job #112338)
Cod sursa(job #112338)
#include <cstdio>
#include <cassert>
#include <vector>
#include <algorithm>
using namespace std;
#define pb push_back
#define sz(c) int((c).size())
#define mp make_pair
#define x first
#define y second
const int Inf = 0x3f3f3f3f;
const int Nmax = 301;
int N;
int A[Nmax][Nmax];
vector< pair< char, pair<short int, short int> > > Moves;
void ReadData() {
freopen("grozavesti.in", "r", stdin);
freopen("grozavesti.out", "w", stdout);
scanf("%d", &N);
assert(1 <= N && N <= 300);
for (int i = 1; i <= N; ++i)
for (int j = 1; j <= N; ++j) {
assert(scanf("%d", &A[i][j]));
assert(1 <= A[i][j] && A[i][j] <= 1000000);
}
}
void Change_lines(int a, int b) {
for (int j = 1; j <= N; ++j)
swap(A[a][j], A[b][j]);
}
void Change_columns(int a, int b) {
for (int i = 1; i <= N; ++i)
swap(A[i][a], A[i][b]);
}
void Solve() {
for (int k = 1; k <= N; ++k) {
int best = Inf, lin, col;
for (int i = k; i <= N; ++i)
for (int j = k; j <= N; ++j)
if (A[i][j] < best) {
best = A[i][j];
lin = i;
col = j;
}
if (lin != k) {
Moves.pb(mp(0, mp(lin, k)));
Change_lines(lin, k);
}
if (col != k) {
Moves.pb(mp(1, mp(col, k)));
Change_columns(col, k);
}
}
}
void WriteData() {
printf("%d\n", sz(Moves));
for (int i = 0; i < sz(Moves); ++i)
printf("%c %d %d\n", Moves[i].x ? 'C' : 'L', Moves[i].y.x, Moves[i].y.y);
}
int main() {
ReadData();
Solve();
WriteData();
}