Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <cstdio>
- #define MAX 1002
- char v[4][MAX][MAX];
- struct {
- short x, y;
- } jos[3][MAX][MAX];
- int dlin[4] = { 1, 0, -1, 0 };
- int dcol[4] = { 0, 1, 0, -1 };
- int main() {
- int l, c, n, k, pozBilaX, pozBilaY, i, j, dir;
- char ch;
- FILE *fin = fopen("cutie.in", "r");
- fscanf(fin, "%d%d\n", &n, &k);
- for (l = 1; l <= n; l++) {
- fgets(v[0][l]+1, n+1, fin);
- for (c = 1; c <= n; c++) {
- if (v[0][l][c] == 'B') {
- v[0][l][c] = v[1][c][n - l + 1] = v[2][n - l + 1][n - c + 1] = v[3][n - c + 1][l] = '.';
- pozBilaX = c;
- pozBilaY = l;
- }
- else v[1][c][n - l + 1] = v[2][n - l + 1][n - c + 1] = v[3][n - c + 1][l] = v[0][l][c];
- }
- fgetc(fin);
- }
- for (i = 1; i <= n; i++)
- for (j = 0; j < 4; j++)
- v[j][i][0] = v[j][0][i] = v[j][n + 1][i] = v[j][i][n + 1] = 'X';
- for (i = 1; i <= n; i++) {
- for (j = 1; j < n; j++) {
- if (v[0][i][j] == '.') {
- for (dir = 0; dir < 3; dir++) {
- l = i;
- c = j;
- while (v[0][l + dlin[dir]][c + dcol[dir]] == '.'/* && jos[dir][l + dlin[dir]][c + dcol[dir]].x == 0*/) {
- c += dcol[dir];
- l += dlin[dir];
- }
- jos[dir][i][j].x = c;
- jos[dir][i][j].y = l;
- }
- }
- }
- }
- dir = 0;
- for (i = 0; i < k; i++) {
- ch = fgetc(fin);
- fgetc(fin);
- if (ch == 'S') {
- dir--;
- if (dir == -1) dir = 3;
- }
- else
- dir = (dir + 1) % 4;
- /*while (v[0][pozBilaY + dlin[dir]][pozBilaX + dcol[dir]] == '.') {
- pozBilaX += dcol[dir];
- pozBilaY += dlin[dir];
- }*/
- if (dir < 3)
- pozBilaX = jos[dir][pozBilaY][pozBilaX].x, pozBilaY = jos[dir][pozBilaY][pozBilaX].y;
- else {
- while (v[0][pozBilaY + dlin[dir]][pozBilaX + dcol[dir]] == '.') {
- pozBilaX += dcol[dir];
- pozBilaY += dlin[dir];
- }
- }
- }
- fclose(fin);
- FILE *fout = fopen("cutie.out", "w");
- if (dir == 0)
- v[dir][pozBilaY][pozBilaX] = 'B';
- else if (dir == 1)
- v[dir][pozBilaX][n - pozBilaY + 1] = 'B';
- else if (dir == 2)
- v[dir][n - pozBilaY + 1][n - pozBilaX + 1] = 'B';
- else
- v[dir][n - pozBilaX + 1][pozBilaY] = 'B';
- for (i = 1; i <= n; i++)
- v[dir][i][n + 1] = 0;
- for (l = 1; l <= n; l++) {
- fputs(v[dir][l]+1, fout);
- fputc('\n', fout);
- }
- fclose(fout);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement