Thursday, August 26, 2010

ACM: 118 - Mutant Flatworld Explorers

很單純的simulation題,就是照著規則去模擬。

CODE

#include <stdio.h>
#include <string.h>

#define MAX 50
#define MAX_LEN 100

int main(){
  int i, len;
  int mx, my, x, y, dir, t[MAX+1][MAX+1];
  int dx[4]={0, 1, 0, -1}, dy[4]={1, 0, -1, 0};
  char c, cmd[MAX_LEN], nesw[4]="NESW";
  
  scanf("%d %d", &mx, &my);
  while( scanf("%d %d %c", &x, &y, &c) != EOF ){
    scanf("%s", cmd);
    
    for(i=0; i<4; i++)
      if( c == nesw[i] )
        dir = i;
    
    len = strlen(cmd);
    for(i=0; i<len; i++){
      switch ( cmd[i] ){
        case 'L':
          dir--;
          break;
        case 'R':
          dir++;
          break;
        case 'F':
          while( dir < 0 )
            dir += 4;
          dir = dir % 4;
          if( (x+dx[dir])<0 || (x+dx[dir])>mx || (y+dy[dir])<0 || (y+dy[dir])>my ){
            if( t[x][y] != 1 ){
              t[x][y] = 1;
              i = len;
            }
          }
          else{
            x += dx[dir];
            y += dy[dir];
          }
          break;
        default: break;
      }/*switch*/
    }/*i*/
    
    while( dir < 0 )
      dir += 4;
    dir = dir % 4;
    printf("%d %d %c", x, y, nesw[dir]);
    if( i > len )
      printf(" LOST");
    printf("\n");
  }/*while*/
  
  exit(0);
}

No comments:

Post a Comment