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 |
我什么地方错了?? 总是WA 大牛麻烦给看看:#include <iostream> #include <fstream> #include <math.h> using namespace std; struct xy{ int x,y; } node[1000]; int mark[1000]; //标记雷达是否已经覆盖了 int n,d; int cmp(const void *a1,const void *a2){ xy s=*(xy *)a1; xy t=*(xy *)a2; return (s.x-t.x); } int cal(int px,int py){ //返回雷达最右边可能的坐标 double l=d*d-py*py; if(l<0)return -1; l=sqrt(l); double re=px+l; if(re>=0)return (int)re; else return ((int)re-1); } void main(){ // ifstream in("data.txt"); int testcase=1; while(1){ cin>>n>>d; if(n==0||d==0)break; for(int i=0;i<n;i++){ cin>>node[i].x>>node[i].y; } memset(mark,0,sizeof(mark)); qsort(node,n,sizeof(node[0]),cmp); int cur=0; bool find=true; if(d<0)find=false;//雷达的半径为负 int radar=0; while(cur!=n&&find){ if(mark[cur]==1){ //如果雷达已经覆盖了这个点就跳过 cur++; }else{ radar++; int mostr=cal(node[cur].x,node[cur].y); //计算这个点最右边的可能的坐标 if(mostr==-1){ find=false; //不存在解 }else { for(int tmp=cur+1;tmp<n;tmp++){ //所有可以被这个x覆盖的点都让它覆盖 if(((node[tmp].x-mostr)*(node[tmp].x-mostr)+node[tmp].y*node[tmp].y)<=4){ mark[tmp]=1; } } mark[cur]=1; cur++; } } } if(find){ cout<<"Case "<<testcase++<<": "<<radar<<endl; }else{ cout<<"Case "<<testcase++<<": "<<-1<<endl; } } } Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator