fork(1) download
  1. #include <stdio.h>
  2. #include <stdbool.h>
  3. #define up 0
  4. #define right 1
  5. #define down 2
  6. #define left 3
  7.  
  8. int main(void) {
  9. // scan data
  10. int m,n,k,r,c;
  11. scanf("%d%d%d%d%d",&m,&n,&k,&r,&c);
  12. int a[100][100];
  13. int i,j;
  14. for(i=0;i<m;i++)
  15. for(j=0;j<n;j++)
  16. scanf("%d",&a[i][j]);
  17.  
  18. //process data
  19. int way=right;
  20. int gem=0;
  21. int point=0;
  22. bool stop=0;
  23. bool success;
  24. while(!stop){
  25. if(a[r][c]==0)
  26. stop=1;
  27. if(a[r][c]>0){
  28. point+=a[r][c];
  29. a[r][c]--;
  30. gem++;
  31. if(point%k==0)
  32. way=(way==3)? 0:(way+1);
  33. success=0;
  34. while(!success)
  35. switch(way){
  36. case up:
  37. if(a[r-1][c]==-1||r-1<0)
  38. way++;
  39. else{
  40. r--;
  41. success=1;
  42. }
  43. break;
  44. case right:
  45. if(a[r][c+1]==-1||c+1>=n)
  46. way++;
  47. else{
  48. c++;
  49. success=1;
  50. }
  51. break;
  52. case down:
  53. if(a[r+1][c]==-1||r+1>=m)
  54. way++;
  55. else{
  56. r++;
  57. success=1;
  58. }
  59. break;
  60. case left:
  61. if(a[r][c-1]==-1||c-1<0)
  62. way=0;
  63. else{
  64. c--;
  65. success=1;
  66. }
  67. break;
  68. }
  69. }
  70. }
  71. printf("%d",gem);
  72. return 0;
  73. }
  74.  
Success #stdin #stdout 0s 5324KB
stdin
4 5 4 2 1
2 0 1 1 1
2 -1 0 2 -1
0 3 2 3 0
-1 1 -1 3 0
stdout
8