博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[2015编程之美] 资格赛C
阅读量:4574 次
发布时间:2019-06-08

本文共 1990 字,大约阅读时间需要 6 分钟。

#1150 : 基站选址

时间限制:
2000ms
单点时限:
1000ms
内存限制:
256MB

描述

需要在一个N × M的网格中建立一个通讯基站,通讯基站仅必须建立在格点上。

网格中有A个用户,每个用户的通讯代价是用户到基站欧几里得距离的平方。

网格中还有B个通讯公司,维护基站的代价是基站到最近的一个通讯公司的路程(路程定义为曼哈顿距离)。

在网格中建立基站的总代价是用户通讯代价的总和加上维护基站的代价,最小总代价。

输入

第一行为一个整数T,表示数据组数。

每组数据第一行为四个整数:N, M, A, B。

接下来的A+B行每行两个整数x, y,代表一个坐标,前A行表示各用户的坐标,后B行表示各通讯公司的坐标。

输出

对于每组数据输出一行"Case #X: Y",X代表数据编号(从1开始),Y代表所求最小代价。

数据范围

1 ≤ T ≤ 20

1 ≤ x ≤ N

1 ≤ y ≤ M

1 ≤ B ≤ 100

小数据

1 ≤ N, M ≤ 100

1 ≤ A ≤ 100

大数据

1 ≤ N, M ≤ 107

1 ≤ A ≤ 1000

样例输入
23 3 4 11 22 12 33 22 24 4 4 21 22 43 14 31 41 3
样例输出
Case #1: 4Case #2: 13 模拟退火,死活过不了,贴一个Wa代码,望路过大神指正
#include 
#include
#include
#include
#include
#include
using namespace std;#define ll long long#define INF 1e40#define PI acos(-1.0)#define N 1010struct Point{ double x,y; Point(){} Point(double x,double y):x(x),y(y){}};int n,m;double lx,ly;Point p[N],q[N];int dir[9][2]={ 0,1,0,-1,1,0,-1,0,-1,-1,1,1,-1,1,1,-1,0,0};double cal(Point t){ double sum=INF; for(int i=1;i<=m;i++) sum=min(sum,fabs(q[i].x-t.x)+fabs(q[i].y-t.y)); for(int i=1;i<=n;i++) sum+=(p[i].x-t.x)*(p[i].x-t.x)+(p[i].y-t.y)*(p[i].y-t.y); return sum;}void solve(){ int TN=4,DN=50; Point u,v,ansp; double ud,vd,ansd=INF; double step=sqrt(lx*lx+ly*ly),eps=1e-4,r=0.95; while(TN--) { u=Point(rand()%int(lx),rand()%int(ly)); ud=cal(u); ud=cal(u); while(step>eps) { bool flag=1; while(flag) { flag=0; for(int i=0;i
lx || v.y<0 || v.y>ly) continue; vd=cal(v); if(vd
lx || y<0 || y>ly) continue; double tt=cal(Point(x,y)); ans=min(ans,tt); } printf("%.0f\n",ans);}int main(){ int T,iCase=1; scanf("%d",&T); while(T--) { scanf("%lf%lf%d%d",&lx,&ly,&n,&m); for(int i=1;i<=n;i++) scanf("%lf%lf",&p[i].x,&p[i].y); for(int i=1;i<=m;i++) scanf("%lf%lf",&q[i].x,&q[i].y); printf("Case #%d: ",iCase++); solve(); } return 0;}

转载于:https://www.cnblogs.com/hate13/p/4472720.html

你可能感兴趣的文章
几种排序算法(PHP版)
查看>>
NDK使用之HelloWorld
查看>>
数据库字段数据类型对索引的影响
查看>>
perl6的介绍与下载编译安装
查看>>
mesos cluster
查看>>
转 Linux会话浅析(写得极好,表述清楚语言不硬)
查看>>
Altium Designer 中差分走线
查看>>
linux 解压缩命令
查看>>
GDUT校赛
查看>>
递归方程组解的渐进阶的求法——差分方程法
查看>>
(HDU)1076 --An Easy Task(简单任务)
查看>>
团队精神与集体主义的区别?
查看>>
Spring Boot 入门(Spring Cloud方向)
查看>>
仿淘宝商品图片放大镜效果(鼠标移动上去会出现放大的图片,并且可以移动)...
查看>>
AngularJS(九):路由
查看>>
Google chrome浏览器HTML5 Beta项目, 未来Web前瞻!
查看>>
GPS.NET 和 GeoFramework开源了
查看>>
汇编:采用址表的方法编写程序实现C程序的switch功能
查看>>
AtiveMQ初次连接的 http error:503 连接错误 Prolem accessing /.Reason : Service Unavailable...
查看>>
Lua1.1 Lua 的参考手册 (三)
查看>>