P3958 求调
  • 板块题目总版
  • 楼主So_Cat
  • 当前回复0
  • 已保存回复0
  • 发布时间2023/12/25 23:14
  • 上次更新2023/12/26 13:31:21
查看原帖
P3958 求调
881373
So_Cat楼主2023/12/25 23:14

80pts WA on #8 & #10

#include<bits/stdc++.h>
#define int long long
using namespace std;
double T , n , h , r , bcj[1005] , under[1005] , up[1005] ;
double dist( int x1 , int yy , int z1 , int x2 , int y2 , int z2 ){
    return sqrt( pow( x1 - x2 , 2 ) + pow( yy - y2 , 2 ) + pow( z1 - z2 , 2 ) ) ;
}
int find( int x ){
    if( bcj[x] == x ) return x ;
    bcj[x] = find( bcj[x] ) ;
    return bcj[x] ;
}
signed main(){
    cin >> T ;
    while( T -- ){
        int x[1005] , y[1005] , z[1005] ;
        cin >> n >> h >> r ;
        for( int i = 1 ; i <= n ; i ++ ){
            cin >> x[i] >> y[i] >> z[i] ;
            if( z[i] - r <= 0 ){
                under[i] = true ;
            }
            else under[i] = false ;
            if( z[i] + r >= h ){
                up[i] = true ;
            }
            else up[i] = false ;
        }
        for( int i = 1 ; i <= n ; i ++ ){
            bcj[i] = i ;
        }
        for( int i = 1 ; i <= n ; i ++ ){
            for( int j = i + 1 ; j <= n ; j ++ ){
                int res = dist( x[i] , y[i] , z[i] , x[j] , y[j] , z[j] ) ;
                if( res <= 2 * r ){
                    bcj[find( j )] = find( i ) ;
                }
            }
        }
        int get = false ;
        for( int i = 1 ; i <= n ; i ++ ){
            for( int j = 1 ; j <= n ; j ++ ){
                if( under[i] && up[j] && find( i ) == find( j ) ){
                    cout << "Yes\n" ;
                    get = true ;
                    break;
                }
            }
            if( get ) break;
        }
        if( get == false ){
            cout << "No\n" ;
        }
    }
    return 0 ;
}
2023/12/25 23:14
加载中...