Advertisement
fireLUFFY

JP&EscapePlan

Jul 19th, 2021
142
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.17 KB | None | 0 0
  1. #include<bits/stdc++.h>
  2. using namespace std;
  3.  
  4. #define int long long
  5. #define inf 2e18
  6. int MOD=1000000007;//998244353;
  7. const int nn=1000050;
  8. bool prime[nn]; //array to store precalculated primes till 10^6
  9. void cal_primes(){memset(prime,true,sizeof(prime)); for(int i=2;i<=sqrt(nn);++i){ if(prime[i]==true){ for(int j=i*i;j<=nn;j+=i){prime[j]=false;}}}}
  10. int dx[4]={0,1,0,-1};
  11. int dy[4]={1,0,-1,0};
  12.  
  13. int n,m,j;
  14. bool flag=false;
  15. vector<pair<int,int>>path;
  16. vector<vector<bool>>visited(502,vector<bool>(502));
  17. vector<vector<int>>a(502,vector<int>(502));
  18.  
  19. bool isend(int x,int y)
  20. {
  21.     if((x==0)||(x==n-1)||(y==0)||(y==m-1))
  22.         return true;
  23.     return false;
  24. }
  25.  
  26. bool isvalid(int x,int y,int w,int z)
  27. {
  28.     if(((a[x][y]-a[w][z])>=0)&&((a[x][y]-a[w][z])<=j))
  29.         return true;
  30.     return false;
  31. }
  32.  
  33. void pathf(int x,int y)
  34. {
  35.     if(isend(x,y))
  36.     {
  37. //      path.push_back(make_pair(x,y));
  38.         cout<<"YES"<<endl;
  39.         cout<<path.size()<<endl;
  40.         for(auto x:path)
  41.             cout<<x.first<<" "<<x.second<<endl;
  42.         flag=true;
  43.         return;
  44.     }
  45.  
  46.     if(!flag)
  47.     {
  48.         for(int i=0;i<4;i++)
  49.         {
  50.             if((!visited[x+dx[i]][y+dy[i]])&&(isvalid(x,y,x+dx[i],y+dy[i])))
  51.             {
  52.                 visited[x+dx[i]][y+dy[i]]=true;
  53.                 path.push_back(make_pair(x+dx[i]+1,y+dy[i]+1));
  54.             //  cerr<<x+dx[i]<<","<<y+dy[i]<<","<<isvalid(x,y,x+dx[i],y+dy[i])<<" | ";
  55.                 pathf(x+dx[i],y+dy[i]);
  56.                 if(flag)
  57.                     break;
  58.                 else
  59.                     path.pop_back();
  60.             }
  61.         }
  62.     }
  63. //  cerr<<endl;
  64.     return;
  65. }
  66.  
  67. void solve(int t)
  68. {
  69.     int testcases=t;
  70.     while(t--)
  71.     {
  72.     //  cout<<"Case #"<<(testcases-t)<<": "<<endl;
  73.         cin>>n>>m;
  74.         for(int i=0;i<n;i++)
  75.             for(int j=0;j<m;j++)
  76.                 cin>>a[i][j];
  77.  
  78.         int x,y;cin>>x>>y>>j;
  79.         path.push_back(make_pair(x,y));
  80.         pathf(x-1,y-1);
  81.         if(!flag)
  82.             cout<<"NO"<<endl;
  83.     }
  84. }
  85.  
  86. main()
  87. {
  88.     auto start=chrono::system_clock::now();
  89.     {
  90.         #ifndef ONLINE_JUDGE
  91.             freopen("input.txt","r",stdin);
  92.             freopen("output.txt","w",stdout);
  93.             freopen("error.txt","w",stderr);
  94.         #endif 
  95.         ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
  96.         int t=1;
  97.     //  cin>>t;
  98.         solve(t);
  99.     }
  100.     auto end=chrono::system_clock::now();
  101.     chrono::duration<double> elapsed=end-start;
  102. //  cout<<endl<<"Time taken: "<<elapsed.count()<<" sec";
  103.     return 0;
  104. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement