• Source
    1. #include<bits/stdc++.h>
    2.  
    3. using namespace std;
    4.  
    5. char str[103][103],dir[50009];
    6.  
    7. int main()
    8. {
    9. int r,c,koyta,i,j,a,b,x,y,k,counter;
    10.  
    11. while(scanf("%d%d%d",&r,&c,&koyta)&&(r|c|koyta))
    12. {
    13. getchar();
    14.  
    15. for(i=0; i<r; i++)
    16. {
    17. gets(str[i]);
    18. }
    19.  
    20. gets(dir);
    21.  
    22. bool tag = false;
    23. counter = 0;
    24.  
    25. for(i=0; i<r; i++)
    26. {
    27. for(j=0; j<c; j++)
    28. {
    29. if(str[i][j]>='L' && str[i][j]<='S')
    30. {
    31. tag = true;
    32. x = i;
    33. y = j;
    34. break;
    35. }
    36. }
    37. if(tag)break;
    38. }
    39. if(str[x][y]=='N')
    40. {
    41. if(x-1>=0 && x-1<r)
    42. a = x-1;
    43. b = y;
    44. k=1;
    45. }
    46. else if(str[x][y]=='S')
    47. {
    48. if(x+1>=0 && x+1<r)
    49. a = x+1;
    50. b = y;
    51. k=2;
    52. }
    53. else if(str[x][y]=='L')
    54. {
    55. a = x;
    56. if(y+1>=0 && y+1<c)
    57. b = y+1;
    58. k=3;
    59. }
    60. else if(str[x][y]=='O')
    61. {
    62. a = x;
    63.  
    64. if(y-1>=0 && y-1<c)
    65. b = y-1;
    66. k=4;
    67. }
    68.  
    69. str[x][y] = '.';
    70.  
    71. for(i=0; i<koyta; i++)
    72. {
    73. if(dir[i]=='D')
    74. {
    75. if(k==1)
    76. {
    77. a = x;
    78. if(b+1>=0 && b+1<c)
    79. b = y+1;
    80. k=3;
    81. }
    82. else if(k==2)
    83. {
    84. a = x;
    85. if(b-1>=0 && b-1<c)
    86. b = y-1;
    87. k=4;
    88. }
    89. else if(k==3)
    90. {
    91. if(a+1>=0 && a+1<r)
    92. a = x+1;
    93. b = y;
    94. k=2;
    95. }
    96. else if(k==4)
    97. {
    98. if(a-1>=0 && a-1<r)
    99. a = x-1;
    100. b = y;
    101. k=1;
    102. }
    103. }
    104. else if(dir[i]=='E')
    105. {
    106. if(k==1)
    107. {
    108. a = x;
    109. if(b-1>=0 && b-1<c)
    110. b = y-1;
    111. k=4;
    112. }
    113. else if(k==2)
    114. {
    115. a = x;
    116. if(b+1>=0 && b+1<c)
    117. b = y+1;
    118. k=3;
    119. }
    120. else if(k==3)
    121. {
    122. if(a-1>=0 && a-1<r)
    123. a = x-1;
    124. b = y;
    125. k=1;
    126. }
    127. else if(k==4)
    128. {
    129. if(a+1>=0 && a+1<r)
    130. a = x+1;
    131. b = y;
    132. k=2;
    133. }
    134. }
    135. else if(dir[i]=='F')
    136. {
    137. if(str[a][b]=='*')
    138. {
    139. counter++;
    140.  
    141. str[a][b] = '.';
    142.  
    143. x=a;
    144. y=b;
    145.  
    146. if(k==1)
    147. {
    148. if(x-1>=0 && x-1<r)
    149. a = x-1;
    150. b = y;
    151. }
    152. else if(k==2)
    153. {
    154. if(x+1>=0 && x+1<r)
    155. a = x+1;
    156. b = y;
    157. }
    158. else if(k==3)
    159. {
    160. a = x;
    161. if(y+1>=0 && y+1<c)
    162. b = y+1;
    163. }
    164. else if(k==4)
    165. {
    166. a = x;
    167.  
    168. if(y-1>=0 && y-1<c)
    169. b = y-1;
    170. }
    171. }
    172. else if(str[a][b]=='.')
    173. {
    174. x = a;
    175. y = b;
    176. if(k==1)
    177. {
    178. if(x-1>=0 && x-1<r)
    179. a = x-1;
    180. b = y;
    181. }
    182. else if(k==2)
    183. {
    184. if(x+1>=0 && x+1<r)
    185. a = x+1;
    186. b = y;
    187. }
    188. else if(k==3)
    189. {
    190. a = x;
    191. if(y+1>=0 && y+1<c)
    192. b = y+1;
    193. }
    194. else if(k==4)
    195. {
    196. a = x;
    197.  
    198. if(y-1>=0 && y-1<c)
    199. b = y-1;
    200. }
    201. }
    202. }
    203. }
    204.  
    205. printf("%d\n",counter);
    206.  
    207. memset(str,'\0',sizeof str);
    208.  
    209. }
    210.  
    211. return 0;
    212. }
    213.