# | Time | Username | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
479391 | rainboy | Konj (COCI19_konj) | C11 | 71 ms | 4040 KiB |
This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include <stdio.h>
#include <string.h>
#define N 300
#define M 300
int min(int a, int b) { return a < b ? a : b; }
int max(int a, int b) { return a > b ? a : b; }
int ds[(N + 1) * (M + 1)];
int find(int i) {
return ds[i] < 0 ? i : (ds[i] = find(ds[i]));
}
void join(int i, int j) {
i = find(i);
j = find(j);
if (i == j)
return;
if (ds[i] > ds[j])
ds[i] = j;
else {
if (ds[i] == ds[j])
ds[i]--;
ds[j] = i;
}
}
int main() {
static int aa[N + 1][M + 1], bb[M + 1][N + 1];
static char cc[N + 1][M + 2];
int k, i, j, i1, j1, i2, j2, r;
scanf("%d", &k);
while (k--) {
scanf("%d%d%d%d", &j1, &i1, &j2, &i2), i1 = N - i1, i2 = N - i2;
if (j1 < j2)
aa[i1][j1]++, aa[i1][j2]--;
else if (j1 > j2)
aa[i1][j2]++, aa[i1][j1]--;
else if (i1 < i2)
bb[j1][i1]++, bb[j1][i2]--;
else if (i1 > i2)
bb[j1][i2]++, bb[j1][i1]--;
}
memset(ds, -1, (N + 1) * (M + 1) * sizeof *ds);
for (i = 0; i <= N; i++) {
for (j = 1; j <= M; j++)
aa[i][j] += aa[i][j - 1];
for (j = 0; j < M; j++)
if (aa[i][j])
join(i * (M + 1) + j, i * (M + 1) + (j + 1));
}
for (j = 0; j <= M; j++) {
for (i = 1; i <= N; i++)
bb[j][i] += bb[j][i - 1];
for (i = 0; i < N; i++)
if (bb[j][i])
join(i * (M + 1) + j, (i + 1) * (M + 1) + j);
}
scanf("%d%d", &i, &j), i = N - i, r = find(i * (M + 1) + j);
i1 = i, j1 = j, i2 = i, j2 = j;
for (i = 0; i <= N; i++)
for (j = 0; j <= M; j++)
if ((cc[i][j] = find(i * (M + 1) + j) == r ? '#' : '.') == '#')
i1 = min(i1, i), i2 = max(i2, i), j1 = min(j1, j), j2 = max(j2, j);
for (i = i1; i <= i2; i++) {
cc[i][j2 + 1] = 0;
printf("%s\n", cc[i] + j1);
}
return 0;
}
Compilation message (stderr)
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |