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;
}

posted on 2010-10-27 15:43  ltang  阅读(117)  评论(0)    收藏  举报

导航