// 23 - 12 - 23
#include<bits/stdc++.h>
using namespace std;
#define read() ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0)
#define day() time_t now = time(0);char* x = ctime(&now);cerr<<"Right Now Is : "<<x<<"\n"
#define int long long
#define double long double
#define ii pair<int,int>
#define X first
#define Y second
const long long MAX = (int)1e5 + 5;
const long long INF = (int)1e9;
const long long MOD = (int)1e9 + 7;
int n,m,w,h;
struct node{
int r,e,id;
}a[MAX];
struct cir{
int x,y,r;
}b[MAX];
string s[MAX];
vector<pair<double,ii>> cost;
int par[MAX];
int find(int u){
return (u == par[u] ? u : par[u] = find(par[u]));
}
void dsu(int u,int v){
int x = find(u);
int y = find(v);
if(x == y)return;
par[x] = y;
}
bool onec(int u,int v){
int x = find(u);
int y = find(v);
return (x == y);
}
signed main(){
read();
cin >> n >> m >> w >> h;
for(int i = 1;i <= n + 5;i++)par[i] = i;
for(int i = 1,x,y,r;i <= n;i++){
cin >> x >> y >> r;
b[i] = {x,y,r};
for(int j = 1;j < i;j++){
cost.push_back({sqrt((x - b[j].x) * (x - b[j].x) + (y - b[j].y) * (y - b[j].y)) - r - b[j].r,{i,j}});
}
cost.push_back({h - (y + r),{i,n + 1}});
cost.push_back({y - r,{i,n + 3}});
cost.push_back({w - (x + r),{i,n + 2}});
cost.push_back({x - r,{i,n + 4}});
}
sort(cost.begin(),cost.end());
for(int i = 1,r,e;i <= m;i++){
cin >> r >> e;
a[i] = {r,e,i};
}
//for(auto v : cost)cout << v.X << " " << v.Y.X << " " << v.Y.Y << '\n';
sort(a + 1,a + 1 + m,[&](const node &a,const node &b){
return a.r < b.r;
});
int t = -1;
for(int i = 1;i <= m;i++){
int r = a[i].r * 2;
int e = a[i].e;
int id = a[i].id;
while(t + 1 < (int)cost.size() && cost[t + 1].X <= r){
t++;
dsu(cost[t].Y.X,cost[t].Y.Y);
}
//cout << id << ' ' << r << " " << e << '\n';
s[id] = "";
if(e == 1){
s[id] += "1";
if(!onec(n + 1,n + 3) && !onec(n + 3,n + 2) && !onec(n + 4,n + 3))s[id] += "2";
if(!onec(n + 1,n + 2) && !onec(n + 3,n + 1) && !onec(n + 4,n + 2) && !onec(n + 4,n + 3))s[id] += "3";
if(!onec(n + 1,n + 4) && !onec(n + 4,n + 3) && !onec(n + 4,n + 2))s[id] += "4";
}else if(e == 2){
if(!onec(n + 1,n + 3) && !onec(n + 3,n + 2) && !onec(n + 4,n + 3))s[id] += "1";
s[id] += "2";
if(!onec(n + 2,n + 3) && !onec(n + 4,n + 2) && !onec(n + 1,n + 2))s[id] += "3";
if(!onec(n + 4,n + 2) && !onec(n + 1,n + 3) && !onec(n + 4,n + 1) && !onec(n + 3,n + 2))s[id] += "4";
}else if(e == 3){
if(!onec(n + 1,n + 2) && !onec(n + 3,n + 1) && !onec(n + 4,n + 2) && !onec(n + 4,n + 3))s[id] += "1";
if(!onec(n + 2,n + 3) && !onec(n + 4,n + 2) && !onec(n + 1,n + 2))s[id] += "2";
s[id] += "3";
if(!onec(n + 1,n + 4) && !onec(n + 1,n + 2) && !onec(n + 1,n + 3))s[id] += "4";
}else if(e == 4){
if(!onec(n + 1,n + 4) && !onec(n + 4,n + 3) && !onec(n + 4,n + 2))s[id] += "1";
if(!onec(n + 4,n + 2) && !onec(n + 1,n + 3) && !onec(n + 4,n + 1) && !onec(n + 3,n + 2))s[id] += "2";
if(!onec(n + 1,n + 4) && !onec(n + 1,n + 2) && !onec(n + 1,n + 3))s[id] += "3";
s[id] += "4";
}
}
for(int i = 1;i <= m;i++)cout << s[i] << '\n';
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |