记录编号 570909 评测结果 AAAAAA
题目名称 喷水装置 最终得分 100
用户昵称 Gravatar什么都想学什么都学了一点的晓无痕 是否通过 通过
代码语言 C++ 运行时间 0.141 s
提交时间 2022-04-25 21:40:28 内存使用 3.17 MiB
显示代码纯文本
#include<bits/stdc++.h>
using namespace std;
int T;
struct Pen
{
int location;
int square;
double num;
double lt;
double r;
} spink[20000];
bool cmp2(Pen a,Pen b)
{
return a.lt<b.lt;
}
bool had=false;
bool can=false;
bool dot=false;
int main()
{
    freopen("sprinkler.in","r",stdin);
    freopen("sprinkler.out","w",stdout);
cin>>T;
for(int i=1;i<=T;++i)
{
int cnt=0;
int n;
double l,w;
cin>>n>>l>>w;
int nt=0;
int cntt=1;
for(int j=1;j<=n;++j)
{
cin>>spink[cntt].location>>spink[cntt].square;
double x=spink[cntt].square;double y=w/2;
if(x<=y)
{
    ++nt;
    continue;
}
else
{
spink[cntt].num=sqrt( (x*x-y*y) );
spink[cntt].lt=spink[cntt].location-spink[cntt].num;
spink[cntt].r=spink[cntt].location+spink[cntt].num;
++cntt;
}
}
n=n-nt;
sort(spink+1,spink+n+1,cmp2);
double legal=0;
pair<double,int>pq;
pq.first=spink[1].r;
if(spink[1].r>=l)
{
    cout<<1<<endl;
    continue;
}
for(int k=1;k<=n;++k)
{
if(spink[k].r>=l)
{
    can=true;
    if(dot==false)
    {
        ++cnt;
    }
    break;
    
}
if(spink[k].lt>legal)
{
    had=true;
    cout<<-1<<endl;
    break;
}
while(spink[k].lt<=legal)
{
if(spink[k].r>=l)
{
    can=true;
    dot=true;
    break;
}
if(spink[k].r>=pq.first&&spink[k].r>=legal)
{
pq.first=spink[k].r;
pq.second=k;
can=true;
}
++k;
}
if(can==false)
{
cout<<-1<<endl;
had=true;
break;
}
--k;
++cnt;
can=false;
legal=pq.first;
}
if(had==false)
{
cout<<cnt<<endl;
}
can=false;
had=false;
}
return 0;
}