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 |
我想知道我为啥错了,排序+贪心,我是把所有包含别的区间的区间都disable掉,再找,不好意思,贴代码求助#include<stdio.h> #include<math.h> #include<memory.h> #include<stdlib.h> struct Interal{ double a; double b; } in[1000]; bool en[1000]; int n,d; int cmp(const void *a,const void *b) { if((*(Interal *)a).a>(*(Interal *)b).a) return 1; else if((*(Interal *)a).a==(*(Interal *)b).a && (*(Interal *)a).b<(*(Interal *)b).b) return 1; else return -1; } void disp() { for(int i=0;i<n;i++) printf("%lf %lf ",in[i].a,in[i].b); printf("\n"); } int find() { qsort(in,n,sizeof(in[0]),cmp); //disp(); memset(en,1,sizeof(en)); for(int i=1;i<n;i++) if(in[i].b<=in[i-1].b) en[i-1]=false; double x=-1000000000; int cnt=0; for(int j=0;j<n;j++) if(en[j] && in[j].a>x){ cnt++; x=in[j].b; } return cnt; } int main() { int x,y; int t=0; while(1){ scanf("%d%d",&n,&d); if(n==0 && d==0) break; t++; bool flag=true; //can be solve or not double tmp; for(int i=0;i<n;i++){ scanf("%d%d",&x,&y); if(y>d) flag=false; if(flag){ tmp=sqrt((double)d*d-y*y); in[i].a=x-tmp; in[i].b=x+tmp; } } if(!flag) printf("Case %d: -1\n",t); else printf("Case %d: %d\n",t,find()); } return 0; } Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator