解いた問題

5/27/2012

SRM407 Div2 Easy

250

やるだけ



  1. class SpiralWalking {  
  2. public:  
  3.   int totalPoints(vector <string> levelMap)  
  4.   {  
  5.   
  6.     const int di[] = {0, 1, 0, -1};  
  7.     const int dj[] = {1, 0, -1, 0};  
  8.   
  9.     int i = 0;  
  10.     int j = 0;  
  11.     int d = 0;  
  12.   
  13.     int sum = 0;  
  14.   
  15.     const int h = levelMap.size();  
  16.     const int w = levelMap[0].size();  
  17.   
  18.     for (int loop = h * w; loop--; ) {  
  19.       sum += (levelMap[i][j] - '0');  
  20.   
  21.       int tmp = d;  
  22.       if (loop == 0) break;  
  23.       while (true) {  
  24.         int ni = i + di[d];  
  25.         int nj = j + dj[d];  
  26.         if (ni < 0 || nj < 0) d = (d + 1) % 4;  
  27.         else if (h <= ni || w <= nj) d = (d + 1) % 4;  
  28.         else if (levelMap[ni][nj] == '@') d = (d + 1) % 4;  
  29.         break;  
  30.       }  
  31.       if (tmp != d) sum -= (levelMap[i][j] - '0');  
  32.       levelMap[i][j] = '@';  
  33.       i = i + di[d];  
  34.       j = j + dj[d];  
  35.     }  
  36.   
  37.     return sum;  
  38.   }  
  39. };