Home > Backend Development > C++ > C++ program to calculate the total cost required for a robot to complete a trip in a grid

C++ program to calculate the total cost required for a robot to complete a trip in a grid

WBOY
Release: 2023-08-25 16:53:17
forward
1362 people have browsed it

C++ program to calculate the total cost required for a robot to complete a trip in a grid

Suppose we have a grid of size h x w. Each cell in the grid contains a positive integer. Now there is a path finding robot placed on a specific cell (p, q) (where p is the row number and q is the column number) and it can move to cell (i, j). The move operation has a specific cost equal to |p - i| |q - j|. There are now q trips with the following properties.

  • Each trip has two values ​​(x, y) and has a common value d.

  • The robot is placed on a cell with value x and then moves to another cell with value x d.

  • Then it moves to another cell with value x d d. This process will continue until the robot reaches a cell with a value greater than or equal to y.

  • y - x is a multiple of d.

Given these trips, we must find the total cost of each trip. If the robot cannot move, the travel cost is 0.

So if the input is h = 3, w = 3, d = 3, q ​​= 1, grid = {{2, 6, 8}, {7, 3, 4}, {5, 1 , 9}}, trips = {{3, 9}}, then the output will be 4.

3 On cell (2, 2)

6 On cell (1, 2)

9 On cell (3, 3)

Total cost = | (1 - 2) (2 - 2) | | (3 - 1) (3 - 2) | = 4.

To solve this problem, we will follow the following steps:

Define one map loc
for initialize i := 0, when i < h, update (increase i by 1), do:
   for initialize j := 0, when j < w, update (increase j by 1), do:
      loc[grid[i, j]] := new pair(i, j)
Define an array dp[d + 1]
for initialize i := 1, when i <= d, update (increase i by 1), do:
   j := i
   while j < w * h, do:
      n := j + d
      if j + d > w * h, then:
      Come out from the loop
   dx := |first value of loc[n] - first value of loc[j]|
   dy := |second value of loc[n] - second value of loc[j]|
   j := j + d
   insert dx + dy at the end of dp[i]
for initialize j := 1, when j < size of dp[i], update (increase j by 1), do:
   dp[i, j] := dp[i, j] + dp[i, j - 1]
for initialize i := 0, when i < q, update (increase i by 1), do:
   tot := 0
   le := first value of trips[i]
   ri := second value of trips[i]
   if ri mod d is same as 0, then:
      f := d
   Otherwise,
         f := ri mod d
   pxl := (le - f) / d
   pxr := (ri - f) / d
   if le is same as f, then:
    if ri is same as f, then:
      tot := 0
   Otherwise
      tot := tot + (dp[f, pxr - 1] - 0)
   Otherwise
      if ri is same as f, then:
            tot := 0
  Otherwise
tot := tot + dp[f, pxr - 1] - dp[f, pxl - 1]
print(tot)
Copy after login

Let us see the implementation below for better understanding −

Example

#include <bits/stdc++.h>
using namespace std;
const int INF = 1e9;
void solve(int h, int w, int d, int q, vector<vector<int>> grid,
vector<pair<int, int>> trips) {
   map<int, pair<int, int>> loc;
   for (int i = 0; i < h; i++) {
      for (int j = 0; j < w; j++)
         loc[grid[i][j]] = make_pair(i, j);
   }
   vector<int> dp[d + 1];
   for (int i = 1; i <= d; i++) {
      int j = i;
      while (j < w * h) {
         int n = j + d;
          if (j + d > w * h)
             break;
             int dx = abs(loc[n].first - loc[j].first);
             int dy = abs(loc[n].second - loc[j].second);
             j += d;
             dp[i].push_back(dx + dy);
      }
      for (j = 1; j < dp[i].size(); j++)
        dp[i][j] += dp[i][j - 1];
   }
   for (int i = 0; i < q; i++) {
      int tot = 0;
      int le, ri;
      le = trips[i].first;
      ri = trips[i].second;
      int f;
      if (ri % d == 0)
         f = d;
      else
         f = ri % d;
      int pxl, pxr;
      pxl = (le - f) / d;
      pxr = (ri - f) / d;
      if (le == f){
         if (ri == f)
            tot = 0;
         else
            tot += (dp[f][pxr - 1] - 0);
      } else {
         if (ri == f)
            tot = 0;
         else
            tot += dp[f][pxr - 1] - dp[f][pxl - 1];
      }
      cout<< tot << endl;
    }
}
int main() {
   int h = 3, w = 3, d = 3, q = 1;
   vector<vector<int>> grid = {{2, 6, 8}, {7, 3, 4}, {5, 1, 9}};
   vector<pair<int, int>> trips = {{3, 9}};
   solve(h, w, d, q, grid, trips);
   return 0;
}
Copy after login

Input

3, 3, 3, 1, {{2, 6, 8}, {7, 3, 4}, {5, 1, 9}}, {{3, 9}}
Copy after login

Output

4
Copy after login

The above is the detailed content of C++ program to calculate the total cost required for a robot to complete a trip in a grid. For more information, please follow other related articles on the PHP Chinese website!

Related labels:
source:tutorialspoint.com
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template