Flash Mob
发布时间:2020-12-15 18:15:34 所属栏目:百科 来源:网络整理
导读:这也是一题暴力解决的题,暂时想不出什么好办法,题意很明显是让你找聚所有点总距离最近的点,应常理来说一般都是较中间的点比较近,所以就从最中间的点开始向周围找,直到找到总距离最小的点。 #includeiostream#includecstdio#includecstring#includealgor
这也是一题暴力解决的题,暂时想不出什么好办法,题意很明显是让你找聚所有点总距离最近的点,应常理来说一般都是较中间的点比较近,所以就从最中间的点开始向周围找,直到找到总距离最小的点。 #include<iostream> #include<cstdio> #include<cstring> #include<algorithm> #include<cmath> using namespace std; int n,xi,yi; struct node { int x,y; }pos[1001]; int jisuan(int xx,int yy) { int sx,sy; sx=sy=0; xi=xx/n; yi=yy/n; for(int i=0;i<n;i++) { sx+=fabs(xi-pos[i].x); sy+=fabs(yi-pos[i].y); } int temp=xi; int stemp; while(1) { stemp=0; temp++; for(int i=0;i<n;i++) { stemp+=fabs(temp-pos[i].x); } if(stemp>=sx) break; sx=stemp; xi=temp; } temp=xi; while(1) { stemp=0; temp--; for(int i=0;i<n;i++) { stemp+=fabs(temp-pos[i].x); } if(stemp>sx) break; sx=stemp; xi=temp; } temp=yi; while(1) { stemp=0; temp++; for(int i=0;i<n;i++) { stemp+=fabs(temp-pos[i].y); } if(stemp>=sy) break; sy=stemp; yi=temp; } temp=yi; while(1) { stemp=0; temp--; for(int i=0;i<n;i++) { stemp+=fabs(temp-pos[i].y); } if(stemp>sy) break; sy=stemp; yi=temp; } return sy+sx; } int main(void) { int num=0; while(scanf("%d",&n),n!=0) { num++; int xx,yy; xx=yy=0; for(int i=0;i<n;i++) { cin>>pos[i].x>>pos[i].y; xx+=pos[i].x; yy+=pos[i].y; } int len=jisuan(xx,yy); printf("Case %d: (%d,%d) %dn",num,yi,len); } } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |