L3-005 垃圾箱分布 (30 分)

2023-11-09

题目

题目链接

题解

对每个垃圾箱进行一次队列优化的Dijskra,每算出一个垃圾箱到其余各个居民点的最短距离后,计算这些距离中的最大距离、最短距离。如果最大距离大于要求的距离则直接忽略这个位置放垃圾桶的情况;否则,如果最短距离小于已经记录的最大的最短距离或者最短距离等于已经记录的最大的最短距离并且距离均值小于已经记录的最小均值,则更新要输出的信息。

优先级:

  1. 最短距离要最大
  2. 距离均值要最小
  3. 垃圾桶编号要小(由于我们是顺序判断每种情况,所以不需要通过该条件进行更新)

注意:

直接printf("%.1lf")输出均值是过不了样例的,但是可以AC。

通过printf进行四舍五入会存在一些问题,这也是我在输出样例的时候发现的。

printf四舍五入问题

所以最好还是通过+0.5来处理

代码

#include<bits/stdc++.h>
#define PII pair <int, int>
using namespace std;

const int INF = 0x3f3f3f3f;
const int N = 5e4 + 10;

int n, m, k, MAXDIST;
int best_pos, best_mindist = INF;
int maxmindist = -1; // 最大的最短距离 
int d[N];
int w[N], e[N], ne[N], h[N], idx;
double best_sum;

void add (int a, int b, int c) {
	w[idx] = c, e[idx] = b, ne[idx] = h[a], h[a] = idx ++;
}

void Dijkstra (int x) { // Dijkstra优先队列优化模板 
	
	memset (d, 0x3f, sizeof d);
	d[x] = 0;
	
	priority_queue <PII, vector <PII>, greater<PII> > q;
	q.push ({0, x});
	
	while (q.size()) {
		PII tt = q.top ();
		q.pop ();
		int t = tt.second;
		int dist = tt.first;
		
		if (dist != d[t]) continue;
		
		for (int i = h[t];~i;i = ne[i]) {
			int j = e[i];
			if (d[j] > d[t] + w[i]) {
				d[j] = d[t] + w[i];
				q.push ({d[j], j});
			}
		}
	}	
}

int main()
{
	memset (h, -1, sizeof h);
	cin >> n >> m >> k >> MAXDIST;
	while (k --) {
		string a, b;
		int c;
		cin >> a >> b >> c;
		int aa, bb;
		if (a[0] == 'G') aa = atoi (a.substr(1).c_str()) + n; // 如果是垃圾箱就让编号从n+1开始 
		else aa = atoi (a.c_str());
		if (b[0] == 'G') bb = atoi (b.substr(1).c_str()) + n;
		else bb = atoi (b.c_str());
		add (aa, bb, c);
		add (bb, aa, c);
	}	
	
	for (int i = n+1;i <= n+m;i ++) {
		double sum = 0.0;
		int maxdist = -1, mindist = INF;
		Dijkstra (i);
// 		cout << "such as : ";
		for (int j = 1;j <= n;j ++) {
			sum += 1.0 * d[j];
			maxdist = max (maxdist, d[j]); // 以第i-n号垃圾桶为起点到其他各个居民的距离的最大值 
			mindist = min (mindist, d[j]); // 以第i-n号垃圾桶为起点到其他各个居民的距离的最小值 
// 			cout << d[j] <<  ' ';
		}
// 		cout << endl;
		// 最大距离必须小于要求  判断最小距离是否大于最大最短距离(若大于则更新)或者最小距离等于最大的最短距离,比较均值,也就是比较分子(距离和) 
		if (maxdist <= MAXDIST && (mindist > maxmindist || (mindist == maxmindist && sum < best_sum))) {
			// 保存最佳输出答案 
			best_pos = i;
			best_sum = sum;
			best_mindist = mindist;
			// 更新用于更新最佳输出答案的数据 
			maxmindist = mindist;
		}
	}
	if (!best_pos) puts ("No Solution");
	else printf ("G%d\n%.1lf %.1lf", best_pos-n, 1.0 * best_mindist, (int(best_sum / n * 10 + 0.5)) / 10.0);
	// 这个输出真离谱,如果直接 printf("%.1lf", best_sum / n) 样例都过不了却能AC

	return 0;
}

沃日,好离谱,之前写了个大根堆都尼玛能AC!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

L3-005 垃圾箱分布 (30 分) 的相关文章

随机推荐

  • 每日一题:打家劫舍(C++)

    题目描述 你是一个专业的小偷 计划偷窃沿街的房屋 每间房内都藏有一定的现金 影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统 如果两间相邻的房屋在同一晚上被小偷闯入 系统会自动报警 给定一个代表每个房屋存放金额的非负整数数组 计
  • Linux环境下,执行可执行程序遇到Permission denied解决办法

    Linux环境下 执行可执行程序遇到Permission denied 原因是此可执行程序没有 执行 权限 1 可以通过 ls al 命令确认 以我遇到的为例子 可以看到play test 没有执行权限 x ls al rw r r 1 i
  • 基于MATLAB的小波去噪方法

    基于MATLAB的小波去噪方法 小波去噪是一种有效的信号降噪技术 在 MATLAB 中 可以利用 Wavelet Toolbox 实现小波变换和小波去噪 本文将介绍基于 MATLAB 的小波去噪方法 并提供相应的源代码 小波变换 小波变换是
  • Spring boot实现更改配置文件后自动更新配置

    一 原理说明 业务目标是实现当配置文件变更后能自动生效而不需要重启程序 实现依赖spring cloud的ContextRefresher对象和文件监听器 二 实现思路 1 使用apache的commons io的文件监听器来监控配置文件是
  • 就挺无语的,这是有脾气的博客

    文章目录 前言 1 背景 2 使用 3 公众号体验 4 结束语 前言 ChatGPT已经推出两个多月了 热度已经不减 ChatGPT由人工智能研究实验室OpenAI在2022年11月30日发布的全新聊天机器人模型 一款人工智能技术驱动的自然
  • k8s之StatefulSet

    什么是StatefulSet 是用来创建有状态应用 可以通过过某种方式记录这些状态 然后在 Pod 被重新创建时 能够为新 Pod 恢复这些状态 什么是有状态应用 首先是需要有数据的持久化 及时Pod被重启后 也能恢复 与重启前保持一致 然
  • linux显存与gpu利用率都很低

    data label data cuda label cuda model cuda
  • 浏览器的存储方案

    浏览器的存储方案 认识Storage WebStorage主要提供了一种机制 可以让浏览器提供一种比cookie更直观的key value存储方式 localStorage 本地存储 提供的是一种永久性的存储方法 在关闭掉网页重新打开时 存
  • Genymotion推送2.6.0后几个问题自己解决的办法

    先上结果 注意版本号 Genymotion 2 6 0 VirtualBox 5 0 10 其实我用了官方的几种历史版本尝试组合了下没能解决最后是都单独更新解决的 到各自官网直接下载即可 反正vbox开了也是推送新版 Genymotion单
  • redis总结

    Redis redis视频链接 概述 Redis是什么 Redis是一个使用ANSI C编写的开源 支持网络 基于内存 分布式 可选持久性的键值对存储数据库 Redis能做什么 内存存储 持久化 rdb aof 效率高 可以用于高速缓存 订
  • 光线追踪算法—镜面反射

    1 镜面 镜面光线传输计算 只涉及主光线计算而渲染出来的图像无法真实表现现实中的光线照射 通过增加能够反射光线的材质 进行空间中具有反射材质的对象之间的反射光线的追踪 可以更好地体现真实感 2 光线镜面反射的计算 当光线与包含反射材质的物体
  • Shell脚本之函数

    前言 接上回分析 关于shell脚本最后一节和拐友们讲一下最后的函数 因为shell函数经常会使用 目录 一 Shell函数 1 1Shell函数的基本格式 1 2 Shell函数的案例 1 3 函数返回值 1 4函数的传参 1 5函数变量
  • 完整的模糊推理系统介绍以及matlab中从零实现(上篇)

    模糊推理系统建模 在matlab中 通过调用文档命令doc fuzzy可以得到一个模糊工具箱的完整介绍 我也是因为工作需要 在看完师姐论文后 仍然迷迷糊糊地 相信有许多人和我一样 在网上查了一堆论文 博客 可能也没有搞得太明白 通过几天的认
  • jetty的安装和启动

    Jetty是当下非常流行的一款轻量级Java Web服务器和Servlet容器实现 它由Eclipse基金会托管 完全免费而且开放源代码 因此所有人均可以从其官网下载最新源代码进行研究 由于其轻量 灵活的特性 Jetty被广泛用于一系列知名
  • 树型结构(二叉树的基础)

    对于树型结构 想必刚开始看见这个词的时候 大家的第一想法一定会是 二叉树吧 但是 笔者所讲的这篇文章不是二叉树 但是 又与二叉树有着关系 树型结构是二叉树的基础 所谓的树型结构是指 树是一种非线性的数据结构 它是由n n gt 0 个有限结
  • 《自然语言处理》第二次实验:机器翻译(Transformer中英文翻译实验)

    文章目录 任务三 按照实验手册进行Transformer中英文翻译实验 步骤 1 OBS创建项目文件夹 步骤 2 下载自然语言处理包 步骤 3 上传实验源码及数据 步骤 4 进入ModelArts开发环境 步骤 1 上传源码和数据至本地容器
  • 微信小程序如何被微信搜索收录?开启页面收录功能,被评定为达标

    微信小程序的内容也跟我们个人博客网站的文章一样 需要被搜索引擎收录后才能吸引自然流量 而微信小程序对应的搜索引擎其实就是微信搜索 所以想要提高收录率 除了发布优质的内容外 还需要确保小程序后台没有关闭 页面收录 功能 同时努力让我们的小程序
  • eslint 报错解决 ,关闭语法检测 vue-admin-template

    关闭eslint语法检测 在 eslintrc js文件中 注释掉 eslint recommended vue config js 里的warnings 和errors 都设为false 找到 eslintignore文件 末尾 加 就好
  • STM32F103使用内部Flash保存参数

    在我们应用开发时 经常会有一些程序运行参数需要保存 如一些修正系数 这些数据的特点是 数量少而且不需要经常修改 但又不能定义为常量 因为每台设备可能不一样而且在以后还有修改的可能 将这类数据存在指定的位置 需要修改时直接修改存储位置的数值
  • L3-005 垃圾箱分布 (30 分)

    题目 题目链接 题解 对每个垃圾箱进行一次队列优化的Dijskra 每算出一个垃圾箱到其余各个居民点的最短距离后 计算这些距离中的最大距离 最短距离 如果最大距离大于要求的距离则直接忽略这个位置放垃圾桶的情况 否则 如果最短距离小于已经记录