This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
// Author: Tazhibaev Iskhak
#include <bits/stdc++.h>
#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>
using namespace __gnu_pbds;
using namespace std;
typedef tree<pair<int, int> ,null_type,less< pair<int, int> >,rb_tree_tag,
tree_order_statistics_node_update> ordered_set;
const long double pi = acos((long double) - 1.0);
const double eps = (double)1e-9;
const int INF = 1e9 + 7;
#define ff first
#define ss second
#define ll long long
#define ld long double
#define pb push_back
void usaco( string filename){
freopen((filename+".in").c_str(), "r", stdin);
freopen((filename+".out").c_str(), "w", stdout);
}
int r, c, n;
bool in(int i, int j){
if(i >= 1 and i <= r and j >= 1 and j <= c) return true;
return false;
}
main(){
ios_base::sync_with_stdio(false);
cin.tie(nullptr); cout.tie(nullptr);
cin >> r >> c >> n;
set<pair<int, int> > st;
for(int i = 0;i < n; i++){
int x, y;
cin >> x >> y;
if(st.count({x, y})) assert(false);
st.insert({x, y});
}
int T;
cin >> T;
while(T--){
pair<int, int> start;
cin >> start.ff >> start.ss;
pair<int, int> end;
cin >> end.ff >> end.ss;
if(end.ff - start.ff == 1 and end.ss >= end.ff){
if(st.count(start)) cout << "Yes";
else cout << "No";
cout << "\n";
continue;
}if(end.ff == start.ff and end.ss >= end.ff){
cout << "Yes" << "\n";
continue;
}else if(end.ff < start.ff ){
cout << "No" << "\n";
continue;
}else if(end.ss < start.ss){
cout << "No" << "\n";
continue;
}
queue< pair<int, int> > q;
int dis[r + 1][c + 1];
memset(dis, -1, sizeof(dis));
dis[start.ff][start.ss] = 0;
q.push(start);
while(!q.empty()){
if(dis[end.ff][end.ss] != -1){
break;
}
pair<int, int> v = q.front();
q.pop();
if(st.count(v) and in(v.ff +1, v.ss) and dis[v.ff + 1][v.ss] == -1){
dis[v.ff + 1][v.ss] = dis[v.ff][v.ss] + 1;
q.push({v.ff + 1, v.ss});
}
if(in(v.ff, v.ss+1) and dis[v.ff][v.ss + 1] == -1){
dis[v.ff][v.ss + 1] = dis[v.ff][v.ss] + 1;
q.push({v.ff, v.ss+1});
}
}
if(dis[end.ff][end.ss] == -1) cout << "No";
else cout << "Yes";
cout << "\n";
}
return 0;
}
Compilation message (stderr)
trampoline.cpp:31:1: warning: ISO C++ forbids declaration of 'main' with no type [-Wreturn-type]
31 | main(){
| ^~~~
trampoline.cpp: In function 'void usaco(std::string)':
trampoline.cpp:20:10: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
20 | freopen((filename+".in").c_str(), "r", stdin);
| ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
trampoline.cpp:21:10: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
21 | freopen((filename+".out").c_str(), "w", stdout);
| ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |