Online Judge | Problem Set | Authors | Online Contests | User | ||||||
---|---|---|---|---|---|---|---|---|---|---|
Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest |
分享一下我的代码,贪心算法,同样是以岛屿为圆心画圆#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: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator