Submission #670755

# Submission time Handle Problem Language Result Execution time Memory
670755 2022-12-10T09:31:39 Z berr Park (BOI16_park) C++17
0 / 100
1771 ms 596 KB
#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){
    if((ty[a]-tr[a])<tmp*2) return 1;
    return 0;
}

int left(int a, int tmp){
    if((tx[a]-tr[a])<tmp*2) return 1;
    return 0;
}

int up(int a, int tmp){
    if((y-(ty[a]+tr[a]))<tmp*2) return 1;
    return 0;
}

int right(int a, int tmp){
    if((x-(tx[a]+tr[a]))<tmp*2) return 1;
    return 0;
}


signed main(){
    ios_base::sync_with_stdio(false);
    cin.tie(0);
        
 
    int n, m; cin >> n >> m >> 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)<2*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(up(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[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(up(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[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(right(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[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";
 
    }



}
# Verdict Execution time Memory Grader output
1 Correct 1771 ms 388 KB Output is correct
2 Incorrect 1570 ms 380 KB Output isn't correct
3 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Incorrect 33 ms 596 KB Output isn't correct
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 1771 ms 388 KB Output is correct
2 Incorrect 1570 ms 380 KB Output isn't correct
3 Halted 0 ms 0 KB -