CodeTyper

B. Deadly Laser

Aug 27th, 2022 (edited)
1,246
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.65 KB | None | 0 0
  1. #include<bits/stdc++.h>
  2.  
  3. #define IOS ios_base::sync_with_stdio(false);
  4. #define Bye return 0
  5. #define CodeTyper main
  6. using ll = long long;
  7.  
  8. using namespace std;
  9.  
  10. const int SZ = 2e5+1, mod = 1e9 + 7;
  11.  
  12. int distance(int x1, int y1, int x2, int y2){
  13.     return abs(x1-x2) + abs(y1-y2);
  14. }
  15.  
  16. bool isValid(int i, int j, int n, int m){
  17.     return i>=1 && i<=n && j>=1 && j<=m;
  18. }
  19.  
  20. int dp[3001][3001];
  21. bool vis[3001][3001];
  22. int dy[] = {0, -1, 0};
  23. int dx[] = {-1, 0, 1};
  24.  
  25. void run_case() {
  26.     int n, m, sx, sy, d; cin>>n>>m>>sx>>sy>>d;
  27.     for (int i = 1; i<=n; i++){
  28.         for (int j = 1; j<=m; j++){
  29.             dp[i][j] = 0;
  30.             vis[i][j] = false;
  31.         }
  32.     }
  33.  
  34.     queue<pair<int, int>> q;
  35.     q.push({n, m});
  36.    
  37.     while(!q.empty()){
  38.         pair<int, int> p = q.front();
  39.         int i = p.first, j = p.second;
  40.         q.pop();
  41.  
  42.         vis[i][j] = true;
  43.  
  44.         if(distance(sx, sy, i, j)<=d)
  45.             continue;
  46.  
  47.         for (int x = 0; x<3; x++){
  48.             int ii = i + dy[x];
  49.             int jj = j + dx[x];
  50.            
  51.             if(isValid(ii, jj, n, m) && distance(sx, sy, ii, jj)>d && vis[ii][jj] == false){
  52.                 dp[ii][jj] = dp[i][j] + 1;
  53.                 q.push({ii, jj});
  54.             }
  55.         }
  56.     }
  57. /*
  58.     for (int i = 1; i<=n; i++){
  59.         for (int j = 1; j<=m; j++){
  60.             cout<<dp[i][j]<<" ";
  61.         } cout<<endl;
  62.     } cout<<endl;*/
  63.  
  64.     cout<<(dp[1][1] == 0 ? -1 : dp[1][1])<<endl;
  65. }
  66.  
  67. int CodeTyper()
  68. {
  69.     IOS;
  70.     int t; cin>>t;
  71.     while(t--) run_case();
  72.     Bye;
  73. }
  74.  
  75. /*
  76.     * Think first, then code. - CodeTyper
  77.     ** Think twice, code once. - CodeTyper
  78. */
  79.  
Advertisement
Add Comment
Please, Sign In to add comment