Flash Mob

来源:互联网 发布:淘宝代销能自己发货吗 编辑:程序博客网 时间:2024/06/05 18:13
这也是一题暴力解决的题,暂时想不出什么好办法,题意很明显是让你找聚所有点总距离最近的点,应常理来说一般都是较中间的点比较近,所以就从最中间的点开始向周围找,直到找到总距离最小的点。
#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) %d\n",num,xi,yi,len);}}

原创粉丝点击