fork download
  1. #include <stdio.h>
  2. int main(){
  3. int n,m,k;
  4. scanf("%d%d%d",&n,&m,&k);
  5.  
  6. int grass[300][300]={0};
  7. for(int i=1;i<=n;i++)
  8. for(int j=1;j<=m;j++){
  9. scanf("%d",&grass[i][j]);
  10. }
  11.  
  12. for(int i=0;i<k;i++){
  13. int op;
  14. scanf("%d",&op);
  15. int x,y;
  16. scanf("%d%d",&x,&y);
  17. if(op==1){ //A
  18. char c;
  19. while(scanf("%c",&c)!=EOF){
  20. if (c == 'N' && x > 1) x--;
  21. else if (c == 'E' && y < m) y++;
  22. else if (c == 'S' && x < n) x++;
  23. else if (c == 'W' && y > 1) y--;
  24.  
  25. if (grass[x][y] > 0) grass[x][y]--;
  26.  
  27. }
  28. }
  29. else{ //B
  30. int a;
  31. scanf("%d",&a);
  32. for(int i=0;i<a;i++){
  33. //determine direction
  34. char c;
  35. if(y<m) c='E';
  36. else if(x<n&&grass[x][y+1]<grass[x+1][y]) c='S';
  37. else if(y>1&&grass[x][y-1]>grass[x+1][y]) c='W';
  38. else if(y>1&&grass[x][y-1]<grass[x-1][y]) c='N';
  39.  
  40. switch(c){
  41. case 'N':
  42. if(x>1){
  43. x--;
  44.  
  45. } grass[x][y]=(grass[x][y]==0)?0:grass[x][y]-1;
  46. break;
  47. case 'E':
  48. if(y<m){
  49. y++;
  50.  
  51. }grass[x][y]=(grass[x][y]==0)?0:grass[x][y]-1;
  52. break;
  53. case 'S':
  54. if(x<n){
  55. x++;
  56.  
  57. } grass[x][y]=(grass[x][y]==0)?0:grass[x][y]-1;
  58. break;
  59. case 'W':
  60. if(y>1){
  61. y--;
  62.  
  63. }grass[x][y]=(grass[x][y]==0)?0:grass[x][y]-1;
  64. break;
  65. }
  66. }
  67. }
  68. }
  69.  
  70. for(int i=1;i<=n;i++){
  71. for(int j=1;j<=m;j++)
  72. printf("%d ",grass[i][j]);
  73. printf("\n");
  74. }
  75. return 0;
  76. }
  77.  
Success #stdin #stdout 0.01s 5320KB
stdin
3 4 4
3 1 4 1
5 9 2 6
5 3 5 8
1 3 2 EWNSSW
2 2 2 6
1 1 4 NSSEWNWWS
2 3 4 10
stdout
3 1 4 1 
1 8 2 6 
0 0 4 8