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 <stdio.h> #include <math.h> #include <string.h> #include <algorithm> using namespace std; struct node { double left, right; }; int N, d, total; node point[2000]; bool cmp(node a, node b) { if (a.right<b.right) return true; else return false; } int Greedy() { int i, j; bool f[2000]; double Xr; if (d<=0) return -1; memset(f, false, sizeof(f)); sort(point, point+N, cmp); total=0; for (i=0; i<N; i++) if (!f[i]) { f[i]=true; total++; Xr=point[i].right; for (j=i+1; j<N; j++) if (!f[j]) { if ((point[j].left<Xr)||(fabs(point[j].left-Xr)<0.001)) f[j]=true; } } return total; } int main() { int T=0, k; double x, y; while (scanf("%d%d", &N, &d)&&(N!=0||d!=0)) { for (k=0; k<N; k++) { scanf("%lf%lf", &x, &y); if (y>d) total=-1; point[k].left=x-sqrt(d*d-y*y); point[k].right=x+sqrt(d*d-y*y); } if (total!=-1) total=Greedy(); T++; printf("Case %d: %d\n", T, total); } return 0; } Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator