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 |
Re:大家看看我的算法哪里错了,提了N次都是wrong answerIn Reply To:大家看看我的算法哪里错了,提了N次都是wrong answer Posted by:liumingod at 2005-09-27 12:56:32 > > 先排除不在圆里的,也就是只储存在圆里的点。覆盖最多的半圆肯定是边界在一个点上面,于是就用一个点和圆心的直线作为方程,将每个点代进去算,大于等于零在左半边圆,小于等于零在右半边圆,然后在每一个点用以上算法循环。。统计最大值,这好象没地方错吧。。 忘了贴SC #include "iostream.h" int done() { int x[151]; int y[151]; int x1,y1; int n; int total; float r; while (true) { cin>>x[0]>>y[0]>>r; if (r<=0) return 0; else { total=1; cin>>n; for (int i=1;i<=n;i++) { cin>>x1>>y1; x1=x1-x[0]; y1=y1-y[0]; if ((x1*x1+y1*y1)-r*r<=0) { x[total]=x1; y[total]=y1; total++; } } total--; // float ks; int maxtotal=1; for (i=1;i<=total;i++) { int left_total=1; int right_total=1; if (x[i]==0) { for (int j=1;j<=total;j++) if (i!=j) { if (x[j]<=0) left_total++; if (x[j]>=0) right_total++; } } else { // ks=((float)y[i])/((float)x[i]); for (int j=1;j<=total;j++) { if (i!=j) { if (y[i]*x[j]-x[i]*y[j]<=0) left_total++; if (y[i]*x[j]-x[i]*y[j]>=0) right_total++; } } } if (left_total>maxtotal) maxtotal=left_total; if (right_total>maxtotal) maxtotal=right_total; } cout<<maxtotal<<"\n"; } } } int main(int argc, char* argv[]) { done(); return 0; } Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator