P11290 【MX-S6-T2】「KDOI-11」飞船 题解

news/2024/11/20 11:49:37/文章来源:https://www.cnblogs.com/Rainsheep/p/18556557

注意到速度的形式是编号相乘,而又有 \(x \in \{1, 2, 3, 4\}\),所以最多 \(\log_2y_i\) 次速度就会达到 \(10^9\) 量级,而此时再加油最少需要 \(1\) 秒,所以再乘一定不优。

直接 dp,有 \(f_{i, j, k}\) 表示当前在第 \(i\) 个加油站,速度为 \(2^j3^k\) 的最短用时,后面的 \(2^j3^k\) 可以递推处理。

具体的,转移考虑当前加油站是否加油即可。

对于询问,二分出当前位置前面的第一个加油站,然后枚举终点状态计算答案即可。

复杂度 \(O(n\log_2y\log_3y + q\log_2 y\log_3y)\)

// 如果命运对你缄默, 那就活给他看。
#pragma GCC optimize(1)
#pragma GCC optimize(2)
#pragma GCC optimize(3)
#pragma GCC optimize("Ofast", "inline", "-ffast-math")
#pragma GCC target("avx,sse2,sse3,sse4,mmx")
#include <cfloat>
#include <iostream>
#include <cstring>
#include <tuple>
#include <iomanip>
#include <cassert>
using namespace std;
typedef long long LL;
// typedef long double LD;
typedef double LD; 
// #define int LL
const int maxn = 100010;
inline LD cmi(LD& x, LD y) { if(y < x) x = y; return x; }
struct Port {int p, t, x;Port () {}Port (int a, int b, int c) { p = a, t = b, x = c; }
} w[maxn];
int n, q;
LL ve[31][20];
LD f[maxn][31][20];
inline int Bound(int y) {int l = 0, r = n;while(l < r) {int mid = l + r + 1 >> 1;if(w[mid].p <= y) l = mid;else r = mid - 1;} return l;
}
signed main() {// freopen("ship2.in", "r", stdin);// freopen("ship.out", "w", stdout);ios :: sync_with_stdio(false);cin.tie(0), cout.tie(0);cin >> n >> q;for(int i = 1; i <= n; ++ i) {int p, t, x;cin >> p >> t >> x;w[i] = {p, t, x};}ve[0][0] = 1;for(int j = 1; j < 20; ++ j) ve[0][j] = ve[0][j - 1] * 3; for(int i = 1; i <= 30; ++ i) {ve[i][0] = ve[i - 1][0] * 2;for(int j = 1; j < 20; ++ j) {ve[i][j] = ve[i][j - 1] * 3;}}for(int i = 0; i <= n; ++ i) {for(int j = 0; j <= 30; ++ j) {for(int k = 0; k < 20; ++ k) {f[i][j][k] = 1e18;}}}f[0][0][0] = 0;for(int i = 1; i <= n; ++ i) {auto [p, t, x] = w[i];for(int j = 0; j <= 30; ++ j) {for(int k = 0; k < 20; ++ k) {cmi(f[i][j][k], f[i - 1][j][k] + 1.0 * (w[i].p - w[i - 1].p) / ve[j][k]);int j2 = j, k2 = k;if(x == 2) j2 -- ;else if(x == 3) k2 -- ;else if(x == 4) j2 -= 2;if(j2 < 0 || k2 < 0) continue ;LL v = ve[j2][k2];LD nt = 1.0 * (w[i].p - w[i - 1].p) / v;cmi(f[i][j][k], f[i - 1][j2][k2] + t + nt);}}}for(int y; q -- ; ) {cin >> y;LD ans = DBL_MAX;int x = Bound(y);for(int i = 0; i <= 30; ++ i) {for(int j = 0; j < 20; ++ j) {LL v = ve[i][j];LD nt = 1.0 * (y - w[x].p) / v;cmi(ans, f[x][i][j] + nt);}}cout << fixed << setprecision(7) << ans << '\n';}return 0;
}

调的时候挂在了奇妙的地方:memset 一个 long double 数组 \(0x7f\) 会出来 nan /hsh。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/837268.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

新兴数据仓库设计与实践手册:从分层架构到实际应用(二)

本手册将分为三部分发布,以帮助读者逐步深入理解数据仓库的设计与实践。第一部分介绍数据仓库的整体架构概述; 第二部分深入讨论ETL在数仓中的应用理论,ODS层的具体实现与应用; 第三部分将围绕DW数据仓库层、ADS层和数据仓库的整体趋势展开;通过这样的结构,您可以系统地学…

【跟着阿舜学音乐-笔记】1.14代理和弦

三和弦代理和弦 代理和弦是指两个和弦从功能上能够相互替代,彼此代替对方执行相互的功能。 这意味着互为代理和弦的两个和弦在功能上有一定的互通性,这就是1.12提到的——拥有两个以上共同音的称为代理和弦。 同时,这种功能上的共通性也有着一定的强弱,在同属关系下,关系大…

TCP/UDP套接字基础编程及拓展

本文章旨在进行TCP/UDP基础套接字编程并在其基础上进行更新拓展。一、环境 1.1 客户端:windows宿主机 1.2 服务器端:Linux虚拟机 1.3 注意事项 测试套接字编程通信时,先确保C/S能互相ping通,且双方主机防火墙允许目的端口号为“创建的端口号”的数据包通过。 二、代码 2…

6款Win电脑高效实用办公软件推荐

作为打工人,是不是总觉得工作效率提不上去呢?今天我就来给大家分享 6 款办公超实用的软件,让你的工作事半功倍! 一、WPS 比office更适合职场小白上手的办公软件!它涵盖了文字、表格、演示等多种功能。写文档时,丰富的模板库能让你快速找到灵感,各种排版和编辑工具一应俱…

bladeX物联网平台私库操作处理步骤

(一)获取对方私库代码并上传到自己的gitlab 步骤 1: 克隆对方的私有仓库 首先,您需要在本地计算机上克隆对方的私有仓库。这通常需要使用HTTPS或SSH URL,并且可能需要身份验证(如用户名和密码、SSH密钥等)。# 假设您已经配置了SSH密钥或知道HTTPS的用户名和密码 git cl…

震撼推荐!性能测试全攻略:零基础也能玩转性能测试!

1、提起性能测试,你的第一反应是什么? 当提到性能测试,你的第一反应是什么?是不屑一顾,认为它很简单,没发展前途、没技术含量?还是觉得它太难了,高不可攀,每当遇到系统的疑难杂症时,抓耳挠腮,无从下手? 很多IT从业人员,认为"性能测试仅仅只是测试的工作,会用…

不同类型的OA办公系统分别有什么作用?

不知道大家有没有发现,在不知不觉间,OA(Office Automation)办公系统的应用已经发展得越来越广泛,可以说是涉及到工作的方方面面。你们想过这是为什么吗? 因为OA办公系统不仅提高了工作效率,还优化了企业的管理流程。随着科技的不断进步,OA办公系统的类型也日益丰富,满…

React+AntD Table支持下拉分页和自定义输入分页条数

实例支持在下拉分页框内输入分页条数来实现自定义分页代码usePageSizeSelect.jsimport {useEffect, useState} from "react"; import Bus from "../../utils/eventBus";export function usePageSizeSelect() {const onInputKeyDown = (e) => {const tem…

LeetCode 2455[可被三整除的偶数平均值]

LeetCode 2455[可被三整除的偶数平均值]题目 链接 LeetCode 2455[可被三整除的偶数平均值] 详情实例提示题解 思路 遍历容器,for 循环遍历,vector 的 at 方法取元素值 判断能否被3整除,不能则继续遍历 能被3整除则判断能否被2整除,即判断奇偶性,不能被2整除,即为奇数则继…

Microsoft.Extensions.AI 初探

本文介绍了Microsoft.Extensions.AI的基本使用。.NET Conf上的介绍 在今年的.NET Conf上Steve Sanderson带来了题为“AI Building Blocks - A new, unified AI layer”的演讲。该演讲的主要内容如下: “大多数.NET应用程序可以通过AI功能变得更加强大和高效,例如语义搜索、自…

如何确定合适的绩效考核周期和频率?

绩效考核周期的确定需要根据企业的实际情况、不同岗位的特殊性、考核指标的性质及考核标准的不同进行综合考虑。 1、一般来说,管理层级越高的岗位,其考核周期也应该设置得相对较长 2、绩效考核周期过短会增加企业的管理成本;过长又会降低绩效考核数据的准确性比如,销售人员…