提交时间:2024-03-12 16:43:13

运行 ID: 137844

#include<bits/stdc++.h> using namespace std; int m,n,w,h; int t; struct Location{ double r; double x; double left; double right; double length; int fin; }l[10005]; int find(double R,double L,int t,double W){ double maxl=0,maxr=0; int id; if(t==n and !(R>=W and L<=0)){ return 0; } if(R>=W and L<=0){ return t; }else if(R>=W){ for(int i=1;i<=n;i++){ if(l[i].fin){ double lc=L-l[i].left; if(lc>maxl){ id=i; maxl=lc; } } } t++; L=L-maxl; l[id].fin=0; find(R,L,t,W); }else if(L<=0){ for(int i=1;i<=n;i++){ if(l[i].fin){ double rc=l[i].right-R; if(rc>maxr){ id=i; maxr=rc; } } } t++; R=R+maxr; l[id].fin=0; find(R,L,t,W); }else{ for(int i=1;i<=n;i++){ if(l[i].fin){ double rc=l[i].right-R; double lc=L-l[i].left; if(lc+rc>maxr+maxl){ id=i; maxl=lc; maxr=rc; } } } t++; R=R+maxr; L=L+maxl; l[id].fin=0; find(R,L,t,W); } } double G(double a,int b){ double c=b; c/=2; if(a<=c){ return 0; }else{ return sqrt(pow(a,2)-pow(c,2)); } } bool wdnmd(Location x,Location y){ if(x.length>y.length){ return true; }else{ return false; } } int main(){ cin>>m; for(int i=1;i<=m;i++){ cin>>n>>w>>h; for(int j=1;j<=n;j++){ cin>>l[j].x>>l[j].r; l[j].left=l[j].x-G(l[j].r,h); l[j].right=l[j].x+G(l[j].r,h); l[j].length=2*G(l[j].r,h); l[j].fin=1; } t=0; sort(l+1,l+1+n,wdnmd); l[i].fin=0; cout<<find(l[i].left,l[i].right,t,w)<<endl; // for(int k=1;k<=n;k++){ // cout<<l[k].left<<endl; // } } }