Advertisement
warrior98

cutie

Mar 16th, 2015
265
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.22 KB | None | 0 0
  1. #include <cstdio>
  2. #define MAX 1002
  3.  
  4. char v[4][MAX][MAX];
  5. struct {
  6.     short x, y;
  7. } jos[3][MAX][MAX];
  8. int dlin[4] = { 1, 0, -1, 0 };
  9. int dcol[4] = { 0, 1, 0, -1 };
  10.  
  11. int main() {
  12.     int l, c, n, k, pozBilaX, pozBilaY, i, j, dir;
  13.     char ch;
  14.  
  15.     FILE *fin = fopen("cutie.in", "r");
  16.     fscanf(fin, "%d%d\n", &n, &k);
  17.  
  18.     for (l = 1; l <= n; l++) {
  19.         fgets(v[0][l]+1, n+1, fin);
  20.  
  21.         for (c = 1; c <= n; c++) {
  22.             if (v[0][l][c] == 'B') {
  23.                 v[0][l][c] = v[1][c][n - l + 1] = v[2][n - l + 1][n - c + 1] = v[3][n - c + 1][l] = '.';
  24.                 pozBilaX = c;
  25.                 pozBilaY = l;
  26.             }
  27.             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];
  28.         }
  29.        
  30.         fgetc(fin);
  31.     }
  32.    
  33.     for (i = 1; i <= n; i++)
  34.         for (j = 0; j < 4; j++)
  35.             v[j][i][0] = v[j][0][i] = v[j][n + 1][i] = v[j][i][n + 1] = 'X';
  36.  
  37.     for (i = 1; i <= n; i++) {
  38.         for (j = 1; j < n; j++) {
  39.             if (v[0][i][j] == '.') {
  40.                 for (dir = 0; dir < 3; dir++) {
  41.                     l = i;
  42.                     c = j;
  43.  
  44.                     while (v[0][l + dlin[dir]][c + dcol[dir]] == '.'/* && jos[dir][l + dlin[dir]][c + dcol[dir]].x == 0*/) {
  45.                         c += dcol[dir];
  46.                         l += dlin[dir];
  47.                     }
  48.  
  49.                     jos[dir][i][j].x = c;
  50.                     jos[dir][i][j].y = l;
  51.                 }
  52.             }
  53.         }
  54.     }
  55.  
  56.     dir = 0;
  57.     for (i = 0; i < k; i++) {
  58.         ch = fgetc(fin);
  59.         fgetc(fin);
  60.  
  61.         if (ch == 'S') {
  62.             dir--;
  63.             if (dir == -1) dir = 3;
  64.         }
  65.         else
  66.             dir = (dir + 1) % 4;
  67.  
  68.         /*while (v[0][pozBilaY + dlin[dir]][pozBilaX + dcol[dir]] == '.') {
  69.             pozBilaX += dcol[dir];
  70.             pozBilaY += dlin[dir];
  71.         }*/
  72.  
  73.         if (dir < 3)
  74.             pozBilaX = jos[dir][pozBilaY][pozBilaX].x, pozBilaY = jos[dir][pozBilaY][pozBilaX].y;
  75.         else {
  76.             while (v[0][pozBilaY + dlin[dir]][pozBilaX + dcol[dir]] == '.') {
  77.                 pozBilaX += dcol[dir];
  78.                 pozBilaY += dlin[dir];
  79.             }
  80.         }
  81.  
  82.     }
  83.  
  84.     fclose(fin);
  85.  
  86.     FILE *fout = fopen("cutie.out", "w");
  87.  
  88.     if (dir == 0)
  89.         v[dir][pozBilaY][pozBilaX] = 'B';
  90.     else if (dir == 1)
  91.         v[dir][pozBilaX][n - pozBilaY + 1] = 'B';
  92.     else if (dir == 2)
  93.         v[dir][n - pozBilaY + 1][n - pozBilaX + 1] = 'B';
  94.     else
  95.         v[dir][n - pozBilaX + 1][pozBilaY] = 'B';
  96.  
  97.     for (i = 1; i <= n; i++)
  98.         v[dir][i][n + 1] = 0;
  99.  
  100.     for (l = 1; l <= n; l++) {
  101.         fputs(v[dir][l]+1, fout);
  102.         fputc('\n', fout);
  103.     }
  104.  
  105.     fclose(fout);
  106.  
  107.     return 0;
  108. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement