记录编号 |
570909 |
评测结果 |
AAAAAA |
题目名称 |
喷水装置 |
最终得分 |
100 |
用户昵称 |
什么都想学什么都学了一点的晓无痕 |
是否通过 |
通过 |
代码语言 |
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;
}