POJ 1328 Radar Installation
解题思路:贪心算法
code:
#include <iostream>
#include <cmath>
using namespace std;
struct P
{
int x,y;
};
int cmp(const void *a, const void *b)
{
struct P *c = (P *)a;
struct P *d = (P *)b;
if (c->x != d->x)return c->x - d->x;
return c->y - d->y;
}
int main()
{
int n, l, t, m = 1;
P p[1000];
double endx, beginx, tempx;
while(cin>>n>>l&&n)
{
for (int i = 0; i < n; i++)cin>>p[i].x>>p[i].y;
qsort(p, n, sizeof(P), cmp);
t = 1;
bool flag = true;
if (l < p[0].y)flag = false;
if(flag)endx = sqrt(double(l * l - p[0].y * p[0].y)) + p[0].x;
for (int i = 1; i < n && flag; i++)
{
if (l < p[i].y)flag = false;
tempx = sqrt(double(l * l - p[i].y * p[i].y));
beginx = p[i].x - tempx;
tempx += p[i].x;
if (beginx > endx)
{
t++;
endx = tempx;
}
if (tempx < endx)
endx = tempx;
}
if (flag)
printf("Case %d: %d\n", m, t);
else
printf("Case %d: -1\n", m);
m++;
}
return 0;
}
浙公网安备 33010602011771号