第三题:基站选址
题目链接:http://hihocoder.com/contest/msbop2015qual/problem/3
分析:小数据直接暴力就OK了,至于大数据吧========还没思路(别打我...我菜我认了)
实现代码如下:
#include <cstdio>
#include <iostream>
#include <cmath>
using namespace std;
#define INF 0x7fffffff
typedef struct node
{
int x,y;
}point;
int disa(point a,point b)
{
return (a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y);
}
int disb(point a,point b)
{
return fabs(a.x-b.x)+fabs(a.y-b.y);
}
int main()
{
int t,T=1;
cin>>t;
int m,n,a,b;
int cnt,ans;
point pa[110],pb[110],p;
while(t--)
{
scanf("%d%d%d%d",&n,&m,&a,&b);
for(int i=0;i<a;i++)
scanf("%d%d",&pa[i].x,&pa[i].y);
for(int i=0;i<b;i++)
scanf("%d%d",&pb[i].x,&pb[i].y);
ans=INF;
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
{
p.x=i;
p.y=j;
cnt=0;
int x=INF;
for(int k=0;k<a;k++)
cnt+=disa(p,pa[k]);
for(int k=0;k<b;k++)
if(x>disb(p,pb[k]))
x=disb(p,pb[k]);
cnt+=x;
if(ans>cnt) ans=cnt;
}
printf("Case #%d: %d\n",T++,ans);
}
return 0;
}