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 <cmath> #include <algorithm> #include <stdlib.h> using namespace std; typedef struct { int x; int y; }Island; typedef struct { float a; float b; }Inst;//区间值,左端点为a,右端点为b int num=0; int visit[1000];//每个坐标对应的区间访问前为0,访问后为1 Inst m[1000]; float xio[1000]={0.0}; int cmp(const void *a,const void *b) { return ((*(Inst *)a).a-(*(Inst *)b).a); } int solution(int n,float d,Island *is) { num=1; if(n>=1&&n<=1000) { int i,j=0,index=0,cu=0; float dx,ma; if(d<=0) { num=-1; return 1; } for(i=0;i<n;i++) { if(is[i].y>d||is[i].y<0) { num=-1; return 1; } } for(i=0;i<n;i++) { dx=(float)pow((double)(d*d-is[i].y*is[i].y),0.5); m[i].a=is[i].x-dx; m[i].b=is[i].x+dx; } qsort(m,n,sizeof(Inst),cmp); for(i=0;i<n;i++) { visit[i]=0; } /*while(cu<n)//还有没遍历到的区间继续循环 { xio[index]=m[cu].b; visit[cu]=1; num++; index++; while(xio[index-1]>=m[cu+1].a) { visit[cu+1]=1; if(xio[index-1]>m[cu+1].b) { xio[--index]=m[cu+1].b; index++; } cu++; } cu++; for(j=0;j<n;j++)//判断是否遍历完所有区间 { if(visit[j]==0) { cu=j; break; } } }*/ ma=m[0].b; for(i=1;i<n;i++) { if(m[i].a>ma) { num++; ma=m[i].b; } else if(m[i].b<ma) { ma=m[i].b; } } return 1; } else if(n==0&&d==0) { return 0; } else { num=-1; return 1; } } int main() { ios::sync_with_stdio(false); int n,d,i,index=1; Island is[1000]; cin>>n; cin>>d; for(i=0;i<n;i++) { cin>>is[i].x; cin>>is[i].y; } while(solution(n,d,is)) { cout<<"Case "<<index++<<": "<<num<<endl; cin>>n; cin>>d; for(i=0;i<n;i++) { cin>>is[i].x; cin>>is[i].y; } } return 0; } Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator