Pagini recente » Cod sursa (job #2505858) | Cod sursa (job #270479) | Cod sursa (job #552243) | Cod sursa (job #621454) | Cod sursa (job #1672320)
#include <fstream>
#include <cstring>
#include <algorithm>
using namespace std;
ifstream fin("culegere.in");
ofstream fout("culegere.out");
const int MAXN = 500005;
const int MAXD = 2000005;
int n, m;
int lg, qs;
int v[2005][2005];
int a[2005][2005];
int c[3][MAXD];
struct qstr{
int p;
int sf;
} dp[MAXN];
struct qst{
int t;
int l;
int c;
int in;
int sf;
int s;
} q[MAXN];
int srt(qstr a, qstr b) {
return a.sf < b.sf;
}
int sfm;
int st, dr;
int se;
int d1[10], d2[10];
int main() {
d1[1] = -1; d1[2] = 0; d1[3] = 1; d1[4] = 0;
d2[1] = 0; d2[2] = 1; d2[3] = 0; d2[4] = -1;
fin >> n >> m >> lg >> qs;
st = 1; dr = lg;
for (int i = 1; i <= lg; ++i) {
c[1][i] = 1;
c[2][i] = i;
v[1][i] = 1;
}
se = 2;
for (int i = 1; i <= qs; ++i) {
fin >> q[i].t >> q[i].l >> q[i].c >> q[i].in >> q[i].sf;
if (q[i].t == 2) {
fin >> q[i].s;
}
dp[i].p = i;
dp[i].sf = q[i].sf;
sfm = max(sfm, q[i].sf);
}
sort(dp + 1, dp + qs + 1, srt);
int var = 1;
int s = 1;
int q1 = 1;
int q2 = 1;
while (var == 1 && s <= sfm) {
while (s == dp[q1].sf) {
int k = dp[q1].p;
if (q[k].t == 1) {
if (a[q[k].l][q[k].c] == 5) {
a[q[k].l][q[k].c] = 0;
}
}
else {
a[q[k].l][q[k].c] = 0;
}
q1++;
}
while (s == q[q2].in) {
if (q[q2].t == 1) {
a[q[q2].l][q[q2].c] = 5;
}
else {
a[q[q2].l][q[q2].c] = q[q2].s;
}
q2++;
}
int ls = c[1][dr] + d1[se];
int cs = c[2][dr] + d2[se];
if (ls < 1) {
ls = n;
}
else if (ls > n) {
ls = 1;
}
if (cs < 1) {
cs = m;
}
else if (cs > m) {
cs = 1;
}
if (v[ls][cs] == 1) {
var = 2;
}
else {
dr++;
c[1][dr] = ls;
c[2][dr] = cs;
v[ls][cs] = 1;
if (a[ls][cs] == 5) {
a[ls][cs] = 0;
}
else {
v[c[1][st]][c[2][st]] = 0;
st++;
if (a[ls][cs] >= 1 && a[ls][cs] <= 4) {
se = a[ls][cs];
}
}
}
s++;
}
if (var == 1) {
fout << "LIBER";
}
else {
fout << "BLOCAT";
}
fout << '\n';
v[c[1][dr]][c[2][dr]] = 2;
for (int i = 1; i <= n; ++i) {
for (int j = 1; j <= m; ++j) {
if (v[i][j] == 0) {
fout << '.';
}
else if (v[i][j] == 1) {
fout << 'O';
}
else {
fout << '#';
}
}
fout << '\n';
}
fout.close();
return 0;
}