poj 貪心相關之1328 Radar Installation
Accepted 172K 16MS
#include<iostream>
#include<cstring>
#include<cstdio>
#include<math.h>
#include<algorithm>
#include<vector>
#include<queue>
#define MAXNUM 1000
using namespace std;
struct point
{
float start;
float end;
};
bool cmp(point p1, point p2)
{
return p1.end < p2.end;
}
int m, n;
float a[MAXNUM], b[MAXNUM];
point P[MAXNUM];
int main()
{
//freopen("1.txt", "r", stdin);
int i, j, Case, cnt;
bool k;
float tmp;
Case = 1;
while (scanf("%d%d", &m, &n) != EOF && (m || n))
{
k = 0;
for (i = 0; i < m; i++)
{
scanf("%f%f", &a[i], &b[i]);
}
for (i = 0; i < m; i++)
{
if (b[i] > n)
{
k = 1;
break;
}
tmp = float(n);
tmp = sqrt(tmp*tmp - b[i] * b[i]);
P[i].start = a[i] - tmp;
P[i].end = a[i] + tmp;
}
if (k)
{
printf("Case %d: -1\n", Case++);
}
else
{
sort(P, P + m, cmp);
cnt = 1;
tmp = P[0].end;
for (i = 0; i < m; i++)
{
if (P[i].start <= tmp)
continue;
else
{
cnt++;
tmp = P[i].end;
}
}
printf("Case %d: %d\n", Case++, cnt);
}
}
}