Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<bits/stdc++.h>
- using namespace std;
- #define int long long
- #define inf 2e18
- int MOD=1000000007;//998244353;
- const int nn=1000050;
- bool prime[nn]; //array to store precalculated primes till 10^6
- 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;}}}}
- int dx[4]={0,1,0,-1};
- int dy[4]={1,0,-1,0};
- int n,m,j;
- bool flag=false;
- vector<pair<int,int>>path;
- vector<vector<bool>>visited(502,vector<bool>(502));
- vector<vector<int>>a(502,vector<int>(502));
- bool isend(int x,int y)
- {
- if((x==0)||(x==n-1)||(y==0)||(y==m-1))
- return true;
- return false;
- }
- bool isvalid(int x,int y,int w,int z)
- {
- if(((a[x][y]-a[w][z])>=0)&&((a[x][y]-a[w][z])<=j))
- return true;
- return false;
- }
- void pathf(int x,int y)
- {
- if(isend(x,y))
- {
- // path.push_back(make_pair(x,y));
- cout<<"YES"<<endl;
- cout<<path.size()<<endl;
- for(auto x:path)
- cout<<x.first<<" "<<x.second<<endl;
- flag=true;
- return;
- }
- if(!flag)
- {
- for(int i=0;i<4;i++)
- {
- if((!visited[x+dx[i]][y+dy[i]])&&(isvalid(x,y,x+dx[i],y+dy[i])))
- {
- visited[x+dx[i]][y+dy[i]]=true;
- path.push_back(make_pair(x+dx[i]+1,y+dy[i]+1));
- // cerr<<x+dx[i]<<","<<y+dy[i]<<","<<isvalid(x,y,x+dx[i],y+dy[i])<<" | ";
- pathf(x+dx[i],y+dy[i]);
- if(flag)
- break;
- else
- path.pop_back();
- }
- }
- }
- // cerr<<endl;
- return;
- }
- void solve(int t)
- {
- int testcases=t;
- while(t--)
- {
- // cout<<"Case #"<<(testcases-t)<<": "<<endl;
- cin>>n>>m;
- for(int i=0;i<n;i++)
- for(int j=0;j<m;j++)
- cin>>a[i][j];
- int x,y;cin>>x>>y>>j;
- path.push_back(make_pair(x,y));
- pathf(x-1,y-1);
- if(!flag)
- cout<<"NO"<<endl;
- }
- }
- main()
- {
- auto start=chrono::system_clock::now();
- {
- #ifndef ONLINE_JUDGE
- freopen("input.txt","r",stdin);
- freopen("output.txt","w",stdout);
- freopen("error.txt","w",stderr);
- #endif
- ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
- int t=1;
- // cin>>t;
- solve(t);
- }
- auto end=chrono::system_clock::now();
- chrono::duration<double> elapsed=end-start;
- // cout<<endl<<"Time taken: "<<elapsed.count()<<" sec";
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement