#include <bits/stdc++.h>
using namespace std;
#define int long long
vector<int> tx(2005), ty(2005), tr(2005), vis(2005);
int dist[4][4], x, y;
queue<int> q;
int check(int a, int b, int s){
int h=(tx[a]-tx[b]);
int e=(ty[a]-ty[b]);
h*=h; e*=e;
h+=e;
int f=2*s+tr[a]+tr[b];
if((f*f)>h) return 1;
return 0;
}
int down(int a, int tmp){
tmp*=2;
if((ty[a]-tr[a])<tmp) return 1;
return 0;
}
int up(int a, int tmp){
tmp*=2;
if((y-(ty[a]+tr[a]))<tmp) return 1;
return 0;
}
int left(int a, int tmp){
tmp*=2;
if((tx[a]-tr[a])<tmp) return 1;
return 0;
}
int right(int a, int tmp){
tmp*=2;
if((x-(tx[a]+tr[a]))<tmp) return 1;
return 0;
}
signed main(){
ios_base::sync_with_stdio(false);
cin.tie(0);
int n, m; cin >> n >> m;
cin >> x >> y;
for(int i=0; i<n; i++){
cin>>tx[i]>>ty[i]>>tr[i];
}
int s=0;
//l u
for(int i=30; i>=0; i--){
int tmp = s+(1<<i);
for(int l=0; l<n; l++){
vis[l]=0;
if(left(l, tmp)) q.push(l), vis[l]=1;
}
while(q.size()){
int v=q.front(); q.pop();
for(int l=0; l<n; l++){
if(!vis[l]&&check(l, v, tmp)){
vis[l]=1; q.push(l);
}
}
}
int flag=1;
for(int l=0; l<n; l++){
if(!vis[l]) continue;
if(up(l, tmp)) flag=0;
}
if(flag) s=tmp;
}
dist[0][1]=dist[1][0]=s;
s=0;
// l, r;
for(int i=30; i>=0; i--){
int tmp = s+(1<<i);
for(int l=0; l<n; l++){
vis[l]=0;
if(left(l, tmp)) q.push(l), vis[l]=1;
}
while(q.size()){
int v=q.front(); q.pop();
for(int l=0; l<n; l++){
if(!vis[l]&&check(l, v, tmp)){
vis[l]=1; q.push(l);
}
}
}
int flag=1;
for(int l=0; l<n; l++){
if(!vis[l]) continue;
if(right(l, tmp)) flag=0;
}
if(flag) s=tmp;
}
dist[0][2]=dist[2][0]=s;
s=0;
//l, d
for(int i=30; i>=0; i--){
int tmp = s+(1<<i);
for(int l=0; l<n; l++){
vis[l]=0;
if(left(l, tmp)) q.push(l), vis[l]=1;
}
while(q.size()){
int v=q.front(); q.pop();
for(int l=0; l<n; l++){
if(!vis[l]&&check(l, v, tmp)){
vis[l]=1; q.push(l);
}
}
}
int flag=1;
for(int l=0; l<n; l++){
if(!vis[l]) continue;
if(down(l, tmp)) flag=0;
}
if(flag) s=tmp;
}
dist[0][3]=dist[3][0]=s;
s=0;
//u, r
for(int i=30; i>=0; i--){
int tmp = s+(1<<i);
for(int l=0; l<n; l++){
vis[l]=0;
if((y-ty[l]-tr[l])<(tmp*2)) q.push(l), vis[l]=1;
}
while(q.size()){
int v=q.front(); q.pop();
for(int l=0; l<n; l++){
if(!vis[l]&&check(l, v, tmp)){
vis[l]=1; q.push(l);
}
}
}
int flag=1;
for(int l=0; l<n; l++){
if(!vis[l]) continue;
if(x-tx[l]-tr[l]<2*tmp) flag=0;
}
if(flag) s=tmp;
}
dist[1][2]=dist[2][1]=s;
s=0;
//u, d
for(int i=30; i>=0; i--){
int tmp = s+(1<<i);
for(int l=0; l<n; l++){
vis[l]=0;
if(y-ty[l]-tr[l]<tmp*2) q.push(l), vis[l]=1;
}
while(q.size()){
int v=q.front(); q.pop();
for(int l=0; l<n; l++){
if(!vis[l]&&check(l, v, tmp)){
vis[l]=1;
q.push(l);
}
}
}
int flag=1;
for(int l=0; l<n; l++){
if(!vis[l]) continue;
if(ty[l]-tr[l]<2*tmp) flag=0;
}
if(flag) s=tmp;
}
dist[1][3]=dist[3][1]=s;
s=0;
// r, d;
for(int i=30; i>=0; i--){
int tmp = s+(1<<i);
for(int l=0; l<n; l++){
vis[l]=0;
if(x-tx[l]-tr[l]<2*tmp) q.push(l), vis[l]=1;
}
while(q.size()){
int v=q.front(); q.pop();
for(int l=0; l<n; l++){
if(!vis[l]&&check(l, v, tmp)){
vis[l]=1; q.push(l);
}
}
}
int flag=1;
for(int l=0; l<n; l++){
if(!vis[l]) continue;
if(ty[l]-tr[l]<2*tmp) flag=0;
}
if(flag) s=tmp;
}
dist[2][3]=dist[3][2]=s+1;
for(int i=0; i<m; i++)
{
int t, s; cin>>s>>t;
string ans;
if(t==1){
ans+='1';
if(min({dist[0][3], dist[1][3], dist[2][3]})>=s) ans+='2';
if(min({dist[0][2], dist[0][3], dist[1][3], dist[1][2]})>=s) ans+='3';
if(min({dist[0][3], dist[0][2], dist[0][1]})>=s) ans+='4';
}
if(t==2){
if(min({dist[0][3], dist[1][3], dist[2][3]})>=s) ans+='1';
ans+='2';
if(min({dist[2][1], dist[2][3], dist[2][0]})>=s) ans+='3';
if(min({dist[0][1], dist[0][2], dist[1][3], dist[2][3]})>=s) ans+='4';
}
if(t==3){
if(min({dist[0][2], dist[0][3], dist[1][3], dist[1][2]})>=s) ans+='1';
if(min({dist[2][1], dist[2][3], dist[2][0]})>=s) ans+='2';
ans+='3';
if(min({dist[1][3], dist[1][2], dist[1][0]})>=s) ans+='4';
}
if(t==4){
if(min({dist[0][3], dist[0][2], dist[0][1]})>=s) ans+='1';
if(min({dist[0][1], dist[0][2], dist[1][3], dist[2][3]})>=s) ans+='2';
if(min({dist[1][3], dist[1][2], dist[1][0]})>=s) ans+='3';
ans+='4';
}
cout<<ans<<"\n";
}
}
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
1775 ms |
380 KB |
Output is correct |
2 |
Correct |
1704 ms |
384 KB |
Output is correct |
3 |
Correct |
1345 ms |
460 KB |
Output is correct |
4 |
Correct |
1496 ms |
376 KB |
Output is correct |
5 |
Correct |
1524 ms |
388 KB |
Output is correct |
6 |
Correct |
1254 ms |
340 KB |
Output is correct |
7 |
Correct |
1719 ms |
380 KB |
Output is correct |
8 |
Correct |
1795 ms |
376 KB |
Output is correct |
9 |
Incorrect |
1 ms |
340 KB |
Output isn't correct |
10 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
41 ms |
628 KB |
Output is correct |
2 |
Correct |
36 ms |
628 KB |
Output is correct |
3 |
Correct |
39 ms |
600 KB |
Output is correct |
4 |
Correct |
38 ms |
724 KB |
Output is correct |
5 |
Incorrect |
36 ms |
628 KB |
Output isn't correct |
6 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
1775 ms |
380 KB |
Output is correct |
2 |
Correct |
1704 ms |
384 KB |
Output is correct |
3 |
Correct |
1345 ms |
460 KB |
Output is correct |
4 |
Correct |
1496 ms |
376 KB |
Output is correct |
5 |
Correct |
1524 ms |
388 KB |
Output is correct |
6 |
Correct |
1254 ms |
340 KB |
Output is correct |
7 |
Correct |
1719 ms |
380 KB |
Output is correct |
8 |
Correct |
1795 ms |
376 KB |
Output is correct |
9 |
Incorrect |
1 ms |
340 KB |
Output isn't correct |
10 |
Halted |
0 ms |
0 KB |
- |