Online JudgeProblem SetAuthorsOnline ContestsUser
Web Board
Home Page
F.A.Qs
Statistical Charts
Problems
Submit Problem
Online Status
Prob.ID:
Register
Update your info
Authors ranklist
Current Contest
Past Contests
Scheduled Contests
Award Contest
User ID:
Password:
  Register

分享一下我的代码,贪心算法,同样是以岛屿为圆心画圆

Posted by 961592690 at 2018-10-17 21:34:37 on Problem 1328
#include<iostream>
#include<algorithm>
#include<math.h>
#include<stdlib.h>
using namespace std;
int N, D;
const int MAX_N = 1000;
typedef pair<int, int> P;
typedef pair<double, double> ps;
bool comp(P p1, P p2) {
	return p1.first < p2.first;
}
P p[MAX_N];
int counts = 1;
void greedy() {
	int no = 0;
	sort(p, p + N, comp);
	for (int i = 0; i < N; i++) {
		if (p[i].second > D) {
			cout << "Case " << counts << ": " << -1 << endl;
			counts++;
			return;
		}
	}
	ps radar[MAX_N];
	for (int i = 0; i < N; i++) {
		double temp = sqrt((double)(D*D - p[i].second*p[i].second));
		double right_bound = temp + p[i].first;
		double left_bound = -temp + p[i].first;
		radar[i].first = left_bound;
		radar[i].second = right_bound;
		
	}
	sort(radar, radar + N, comp);
	
	for (int i = 0; i < N; i++) {
		no = no + 1;
		double xx = radar[i].second;
		for (int j = i+1; j < N; j++) {
			if (radar[j].first<=xx) {
				if (radar[j].second < xx)
					xx = radar[j].second;
				i = i+1;
			}
			else {
				break;
			}

		}
	}
	cout <<"Case "<<counts<<": "<< no << endl;
	counts++;
}
int main() {
	while (true)
	{
		
		cin >> N >> D;
		if (N == 0) {
			break;
		}
		memset(p, 0, sizeof(p));
		for (int i = 0; i < N; i++) {
			cin >> p[i].first >> p[i].second;
		}
		
		greedy();
	}
	system("pause");
	return 0;
}

Followed by:

Post your reply here:
User ID:
Password:
Title:

Content:

Home Page   Go Back  To top


All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator