UVa 10382 Watering Grass
#include<cstdio>
#include<cmath>
#include<algorithm>
using namespace std;
const int MAXN = 10001;
struct node
{
double s,t;
bool operator < (const node& x) const
{
if(s!=x.s)
return s <x.s;
else
return t >x.t;
}
};
int main()
{
int n,cnt;
double w,l,p,r;
struct node num[MAXN];
int st;
while(scanf("%d%lf%lf",&n,&l,&w)!=EOF)
{
st=0;
for(int i=0;i<n;i++)
{
scanf("%lf%lf",&p,&r);
if(r>=w/2.0)
{
num[st].s=p-sqrt(r*r-w*w/4.0);
num[st].t=p+sqrt(r*r-w*w/4.0);
if(num[st].s<0)
num[st].s=0;
if(num[st].t>l)
num[st].t=l;
st++;
}
}
sort(num,num+st);
// for(int i=0;i<st;i++)
// printf("%lf %lf\n",num[i].s,num[i].t);
double a=num[0].s,b=num[0].t;
cnt=1;
for(int i=1;i<st;i++)
if(num[i].s>b)
break;
else if(num[i].s<=a && num[i].t>b)
b=num[i].t;
else if(num[i].s>a && num[i].t>b)
a=b,b=num[i].t,cnt++;
if(num[0].s>0 || b<l)
printf("-1\n");
else
printf("%d\n",cnt);
}
return 0;
}
#include<cmath>
#include<algorithm>
using namespace std;
const int MAXN = 10001;
struct node
{
double s,t;
bool operator < (const node& x) const
{
if(s!=x.s)
return s <x.s;
else
return t >x.t;
}
};
int main()
{
int n,cnt;
double w,l,p,r;
struct node num[MAXN];
int st;
while(scanf("%d%lf%lf",&n,&l,&w)!=EOF)
{
st=0;
for(int i=0;i<n;i++)
{
scanf("%lf%lf",&p,&r);
if(r>=w/2.0)
{
num[st].s=p-sqrt(r*r-w*w/4.0);
num[st].t=p+sqrt(r*r-w*w/4.0);
if(num[st].s<0)
num[st].s=0;
if(num[st].t>l)
num[st].t=l;
st++;
}
}
sort(num,num+st);
// for(int i=0;i<st;i++)
// printf("%lf %lf\n",num[i].s,num[i].t);
double a=num[0].s,b=num[0].t;
cnt=1;
for(int i=1;i<st;i++)
if(num[i].s>b)
break;
else if(num[i].s<=a && num[i].t>b)
b=num[i].t;
else if(num[i].s>a && num[i].t>b)
a=b,b=num[i].t,cnt++;
if(num[0].s>0 || b<l)
printf("-1\n");
else
printf("%d\n",cnt);
}
return 0;
}
浙公网安备 33010602011771号