#include <cstdio> #include <cstdlib> #include <cstring> #define MAX_N 3000 static unsigned tab[500][500]; static unsigned h, w; typedef void op_t(void); typedef op_t *op_p; static void op_gora(void) { unsigned x, y, z; for (x = 0; x < w; x++) { for (y = z = 0; y < h; y++) { if (tab[y][x] != '.') { tab[z++][x] = tab[y][x]; } } while (z < h) { tab[z++][x] = '.'; } } } static void op_dol(void) { unsigned x, y, z; for (x = 0; x < w; x++) { for (y = z = h; y > 0; y--) { if (tab[y - 1][x] != '.') { tab[--z][x] = tab[y - 1][x]; } } while (z > 0) { tab[--z][x] = '.'; } } } static void op_lewo(void) { unsigned x, y, z; for (y = 0; y < h; y++) { for (x = z = 0; x < h; x++) { if (tab[y][x] != '.') { tab[y][z++] = tab[y][x]; } } while (z < w) { tab[y][z++] = '.'; } } } static void op_prawo(void) { unsigned x, y, z; for (y = 0; y < h; y++) { for (x = z = w; x > 0; x--) { if (tab[y][x - 1] != '.') { tab[y][--z] = tab[y][x - 1]; } } while (z > 0) { tab[y][--z] = '.'; } } } static op_p do_op[0x100]; int main(void) { unsigned x, y, ops; do_op['G'] = op_gora; do_op['L'] = op_lewo; do_op['D'] = op_dol; do_op['P'] = op_prawo; scanf("%u%u", &h, &w); for (y = 0; y < h; y++) { getchar(); for (x = 0; x < w; x++) { tab[y][x] = getchar(); } } scanf("%u\n", &ops); while (ops--) { op_p op = do_op[getchar()]; if (op) { op(); } } for (y = 0; y < h; y++) { for (x = 0; x < w; x++) { putchar(tab[y][x]); } putchar('\n'); } return 0; }
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 | #include <cstdio> #include <cstdlib> #include <cstring> #define MAX_N 3000 static unsigned tab[500][500]; static unsigned h, w; typedef void op_t(void); typedef op_t *op_p; static void op_gora(void) { unsigned x, y, z; for (x = 0; x < w; x++) { for (y = z = 0; y < h; y++) { if (tab[y][x] != '.') { tab[z++][x] = tab[y][x]; } } while (z < h) { tab[z++][x] = '.'; } } } static void op_dol(void) { unsigned x, y, z; for (x = 0; x < w; x++) { for (y = z = h; y > 0; y--) { if (tab[y - 1][x] != '.') { tab[--z][x] = tab[y - 1][x]; } } while (z > 0) { tab[--z][x] = '.'; } } } static void op_lewo(void) { unsigned x, y, z; for (y = 0; y < h; y++) { for (x = z = 0; x < h; x++) { if (tab[y][x] != '.') { tab[y][z++] = tab[y][x]; } } while (z < w) { tab[y][z++] = '.'; } } } static void op_prawo(void) { unsigned x, y, z; for (y = 0; y < h; y++) { for (x = z = w; x > 0; x--) { if (tab[y][x - 1] != '.') { tab[y][--z] = tab[y][x - 1]; } } while (z > 0) { tab[y][--z] = '.'; } } } static op_p do_op[0x100]; int main(void) { unsigned x, y, ops; do_op['G'] = op_gora; do_op['L'] = op_lewo; do_op['D'] = op_dol; do_op['P'] = op_prawo; scanf("%u%u", &h, &w); for (y = 0; y < h; y++) { getchar(); for (x = 0; x < w; x++) { tab[y][x] = getchar(); } } scanf("%u\n", &ops); while (ops--) { op_p op = do_op[getchar()]; if (op) { op(); } } for (y = 0; y < h; y++) { for (x = 0; x < w; x++) { putchar(tab[y][x]); } putchar('\n'); } return 0; } |