Advertisement
Guest User

Untitled

a guest
Jan 20th, 2019
60
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.44 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. #define F first
  3. #define S second
  4. using namespace std;
  5. //#define int long long
  6. int k[101][101], k1[101][101];
  7. int rx[4] = {1, -1, 0, 0};
  8. int ry[4] = {0, 0, 1, -1};
  9. signed main()
  10. {
  11. ios_base::sync_with_stdio(0);
  12. cin.tie(0);
  13. cout.tie(0);
  14. freopen("input.txt", "r", stdin);
  15. freopen("output.txt", "w", stdout);
  16. int n, m, h;
  17. cin >> n >> m >> h;
  18. string s[n];
  19. for (int i = 0; i < n; ++i) {
  20. cin >> s[i];
  21. }
  22. int x[n][m];
  23. int sx = -1, sy = -1, fx = -1, fy = -1;
  24. for (int i = 0; i < n; ++i)
  25. for (int j = 0; j < m; ++j) {
  26. cin >> x[i][j];
  27. if (s[i][j] == 'A') {
  28.  
  29. sx = i;
  30. sy = j;
  31. } else if (s[i][j] == 'B') {
  32. fx = i;
  33. fy = j;
  34. }
  35. }
  36. queue < pair < int , int > > q;
  37. q.push({sx, sy});
  38. int hp[n][m] = {};
  39. for (int i = 0; i < n; ++i)
  40. for (int j = 0; j < m; ++j) {
  41. hp[i][j] = -1;
  42. }
  43. hp[sx][sy] = h;
  44. k[sx][sy] = 1;
  45. while (!q.empty()) {
  46. int vx = q.front().F, vy = q.front().S;
  47. q.pop();
  48. for (int i = 0; i < 4; ++i) {
  49. int st = 0;
  50. int a = vx + rx[i], b = vy + ry[i];
  51. if (a < 0 || b < 0 || a >= n || b >= m || s[a][b] == 'X') {
  52. continue;
  53. }
  54. if (s[a][b] == 'I') {
  55. st = x[a][b];
  56. }
  57. else if(s[a][b] == 'F')st = -x[a][b];
  58. // cout << vx << " " << vy << " " << a << " " << b << " " << hp[a][b] << " " << hp[vx][vy] << endl;
  59. if (hp[vx][vy] - st > 0) {
  60. if ((k[vx][vy] + 1 < k[a][b] && k[a][b] != 0)|| (k[vx][vy] + 1 == k[a][b] && k[vx][vy] + 1 > hp[a][b] && k[a][b] != 0) || k[a][b] == 0){
  61. q.push({a, b});
  62. k[a][b] = k[vx][vy] + 1;
  63. hp[a][b] = hp[vx][vy] - st;
  64. hp[a][b] = min(h, hp[a][b]);
  65. }
  66. }
  67. else if (s[vx][vy] =='F'){
  68. if (st > h)continue;
  69. if ((k[vx][vy] + (st - hp[vx][vy] + 1) < k[a][b] && k[a][b] != 0)|| (k[vx][vy] + (st - hp[vx][vy] + 1) == k[a][b] && k[vx][vy] + (st - hp[vx][vy] + 1) > hp[a][b] && k[a][b] != 0) || k[a][b] == 0){
  70. q.push({a, b});
  71. k[a][b] = k[vx][vy] + (st - hp[vx][vy] + 1);
  72. hp[a][b] = 1;
  73. hp[a][b] = min(h, hp[a][b]);
  74. }
  75. }
  76. }
  77. // cout << q.size() << endl;
  78. }
  79. cout << k[fx][fy] - 1 << endl;
  80. for (int i = 0; i < n; ++i)
  81. for (int j = 0; j < m; ++j) {
  82. hp[i][j] = -1;
  83. }
  84.  
  85. hp[sx][sy] = h;
  86. q.push({sx, sy});
  87. k1[sx][sy] = 1;
  88. while (!q.empty()) {
  89. int vx = q.front().F, vy = q.front().S;
  90. q.pop();
  91. for (int i = 0; i < 4; ++i) {
  92. int st = 0;
  93. int a = vx + rx[i], b = vy + ry[i];
  94. if (a < 0 || b < 0 || a >= n || b >= m || s[a][b] == 'X') {
  95. continue;
  96. }
  97. if (s[a][b] == 'F') {
  98. st = x[a][b];
  99. }
  100. else if (s[a][b] == 'I')st = -x[a][b];
  101. // cout << vx << " " << vy << " " << a << " " << b << " " << hp[a][b] << " " << hp[vx][vy] << endl;
  102. if (hp[vx][vy] - st > 0) {
  103. if ((k1[vx][vy] + 1 < k1[a][b] && k1[a][b] != 0)|| (k1[vx][vy] + 1 == k1[a][b] && k1[vx][vy] + 1 > hp[a][b] && k1[a][b] != 0) || k1[a][b] == 0){
  104. q.push({a, b});
  105. k1[a][b] = k1[vx][vy] + 1;
  106. hp[a][b] = hp[vx][vy] - st;
  107. hp[a][b] = min(h, hp[a][b]);
  108. }
  109. }
  110. else if (s[vx][vy] =='I'){
  111. if (st > h)continue;
  112. if ((k1[vx][vy] + (st - hp[vx][vy] + 1) < k1[a][b] && k1[a][b] != 0) || k1[a][b] == 0){
  113. q.push({a, b});
  114. k1[a][b] = k1[vx][vy] + (st - hp[vx][vy] + 1);
  115. cout << (st - hp[vx][vy] + 1) << " " << st << " " << hp[vx][vy] << endl;
  116. hp[a][b] = 1;
  117. hp[a][b] = min(h, hp[a][b]);
  118. }
  119. }
  120. }
  121. }
  122. // cout << k1[fx][fy];
  123. for (int i = 0; i < n; ++i) {
  124. for (int j = 0; j < m; ++j) {
  125. cout << k1[i][j] << " ";
  126. }
  127. cout << endl;
  128. }
  129. cout << sx << " " << sy << " " << fx << " " << fy;
  130. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement