比赛 ?板子大赛 评测结果 TTTTTT
题目名称 喷水装置 最终得分 0
用户昵称 张雨晴 运行时间 6.601 s
代码语言 C++ 内存使用 3.86 MiB
提交时间 2026-01-17 11:32:38
显示代码纯文本
#include<bits/stdc++.h>
using namespace std;
int t; 
int fl=0;
double n,l,w;
int ans[15005];
int b[15005];
struct type{
    double wz,r;
}a[15005];
bool cmp(int x,int y){
    return a[x].wz<a[y].wz;
}
bool fff(int x,int y){
    if(sqrt(pow(a[ans[x]].r,2)-pow(w/2,2))+sqrt(pow(a[ans[y]].r,2)-pow(w/2,2))>=abs(a[ans[x]].wz-a[ans[y]].wz)){
        return 1;
    }
    return 0;
}
void dfs(int s,int num){
    if(s>num){
        sort(ans+1,ans+s+1,cmp);
        if(a[ans[1]].r<sqrt(pow(a[ans[1]].wz,2)+pow(w/2,2))) return;
        if(l-a[ans[s]].r<sqrt(pow(l-a[ans[s]].wz,2)+pow(w/2,2))) return;
        if(s==1){
            fl=1;
            return ;
        }
        for(int i=1;i<s;i++){
            if(fff(i,i+1)==0){
                return ;
            }
        }
        fl=1;
        return ;
    }
    for(int i=1;i<=n;i++){
        if(b[i]) continue;
        b[i]=1;
        ans[s]=i;
        dfs(s+1,num);
        b[i]=0;
    }
}
bool check(int k){
    fl=0;
    for(int i=1;i<=n;i++){
        b[i]=0;
    }
    dfs(1,k);
    return fl;
}
int main(){
    freopen("sprinkler.in","r",stdin);
    freopen("sprinkler.out","w",stdout);
    
    cin>>t;
    while(t--){
        cin>>n>>l>>w;
        if(n==0&&w>0){
            cout<<"-1\n";
            continue;
        } 
        for(int i=1;i<=n;i++){
            cin>>a[i].wz>>a[i].r;
        }
        int l=0,r=15005;
        int ans=0;
        while(l<=r){
            int mid=(l+r)/2;
            if(check(mid)){
                ans=mid;
                r=mid-1;
            }else{
                l=mid+1;
            }
        }
        if(ans==15005){
            cout<<-1<<"\n";
        }else{
            cout<<ans<<"\n";
        }
    }
    return 0;
}