题目地址

本题是一道疯狂推式子的玄学复杂度sb题。

解题思路

1.数学部分

​ 首先假定已经将火箭分成了 \(n+1\) 级,记使用了 \(n\) 个分级器。记各级的开始时间点为:

\[0=t_0<t_1<t_2<\cdots<t_n<t_{n+1}=T
\]

其中 \(t_0\) 总的开始,\(t_{n+1}\) 为总的结束。称时间段 \([t_k,t_{k+1}]\) 为第 \(k\) 阶段, \(0\leqslant k \leqslant n\) 。

​ 为了方便,记第 \(k\) 阶段除燃料之外的质量总共为:

\[M_{\times}(k)=M_0+\frac{n+1-k}{n+1}M_1+(n-k)M_2
\]

设火箭该阶段燃料质量关于时间的函数为 \(m_k(t)\) ,根据“火箭瞬时的燃料消耗速度与火箭的瞬时总质量成正比”,以及每一阶段结束时剩余的燃料质量,列出方程:

\[\left\{
\begin{align*}
& \frac{\text{d}m_k}{\text{d}t}=-\frac{1}{\eta}(m_k+M_{\times}(k)) \\
& m_k(t_{k+1})=\frac{n-k}{n+1}M
\end{align*}
\right.
\]

解得:

\[m_k(t)=\left(M_{\times}(k)+\frac{n-k}{n+1}M\right){e}^{\frac{t_{k+1}-t}{\eta}}-M_{\times}(k)
\]

​ 考虑第 \(k\) 阶段开头,有:

\[m_k(t_k)=\frac{n+1-k}{n+1}M
\]

带入化简可得:

\[\frac{t_{k+1}-t_k}{\eta}
=\ln{\left(M_{\times}(k)+\frac{n+1-k}{n+1}M\right)}-\ln{\left(M_{\times}(k)+\frac{n-k}{n+1}M\right)}
\]

累加,得到:

\[\frac{T}{\eta}=\frac{t_{n+1}-t_0}{\eta}=\sum_{k=0}^{n}{\frac{t_{k+1}-t_k}{\eta}}
=\sum_{k=0}^{n}{\left(\ln{\left(M_{\times}(k)+\frac{n+1-k}{n+1}M\right)}-\ln{\left(M_{\times}(k)+\frac{n-k}{n+1}M\right)}\right)}
\]

2.代码部分

​ 根据以上推导,我们列出了关于未知数 \(M\) 的方程:

\[\sum_{k=0}^{n}{\left(\ln{\left(M_{\times}(k)+\frac{n+1-k}{n+1}M\right)}-\ln{\left(M_{\times}(k)+\frac{n-k}{n+1}M\right)}\right)}=\frac{T}{\eta}
\]

由于题目仅要求整数级别的复杂度,我们可以通过二分(通过“简单“的求导就能证明其单调性)近似求解 \(M\) 的值,每次通过循环计算出上式中等号左侧的值,若不小于右侧则合法。其复杂度为 \(n\log M\) 。

​ 然后我们需要对 \(n\) 进行遍历。若采取直接遍历的方法,总复杂度为 \(n^2\log M\) ,会TLE。注意到 \(M\) 关于 \(n\) 的函数先减后增,于是可以采用爬山算法,随机地进行求解。

代码\(_{_{\text{(数据就是它造的)}}}\)

#include<iostream>
#include<cmath>
using namespace std;
typedef unsigned long long ull;
int M0, M1, M2, T, eta; //五个参数
const int steps = 5, step[steps] = { 10000,1000,100,10,1 }, maxn = 100000;
//步数大小和最大层数,这会影响算法正确性,请“适当”地自行选择
constexpr double Mx(int n, int k) {
return (double)(n + 1 - k) * M1 / (n + 1) + M0 + (double)(n - k) * M2;
} //第k阶段除燃料之外的质量
bool check(int n, ull m) {
double sum = 0;
for (int k = 0; k <= n; k++)
sum += log(Mx(n, k) + (double)(n + 1 - k) / (n + 1) * m)
- log(Mx(n, k) + (double)(n - k) / (n + 1) * m);
if (sum < (double)T / eta) return false;
return true;
} //检测合法性
int main() {
cin >> M1 >> M2 >> eta >> M0 >> T;
int ansn = 0;
ull ansm = (ull)ceil((exp((double)T / eta) - 1) * ((double)M0 + M1));
for (int i = 0; i < steps; i++) { //枚举步数大小
for (int n = ansn + step[i]; n < maxn; n += step[i]) {
ull lm = (ull)floor(Mx(n, 0) * eta), rm = ansm;
if (lm > rm || !check(n, rm)) break;
while (lm < rm) {
ull mid = (lm + rm) / 2;
if (check(n, mid)) rm = mid;
else lm = mid + 1;
} //易懂的二分答案
if (rm < ansm) { //为使n尽量小,正向时是小于
ansm = rm; ansn = n;
}
} //正向爬山
for (int n = ansn - step[i]; n < maxn; n -= step[i]) {
ull lm = (ull)floor(Mx(n, 0) * eta), rm = ansm;
if (lm > rm || !check(n, rm)) break;
while (lm < rm) {
ull mid = (lm + rm) / 2;
if (check(n, mid)) rm = mid;
else lm = mid + 1;
}
if (rm <= ansm) { //为使n尽量小,反向时是小于等于
ansm = rm; ansn = n;
}
} //反向爬山
}
cout << ansn << endl;
return 0;
}

U179915 关于分级火箭的一点理想化的计算的更多相关文章

  1. Web系统大规模并发——电商秒杀与抢购

    电商的秒杀和抢购,对我们来说,都不是一个陌生的东西.然而,从技术的角度来说,这对于Web系统是一个巨大的考验.当一个Web系统,在一秒钟内收到数以万计甚至更多请求时,系统的优化和稳定至关重要.这次我们 ...

  2. Web系统大规模并发——电商秒杀与抢购 【转】

    电商的秒杀和抢购,对我们来说,都不是一个陌生的东西.然而,从技术的角度来说,这对于Web系统是一个巨大的考验.当一个Web系统,在一秒钟内收到数以万计甚至更多请求时,系统的优化和稳定至关重要.这次我们 ...

  3. halcon算子

    halcon的算子列表   Chapter 1 :Classification 1.1 Gaussian-Mixture-Models 1.add_sample_class_gmm 功能:把一个训练样 ...

  4. 徐汉彬:Web系统大规模并发——电商秒杀与抢购(转)

    [导读]徐汉彬曾在阿里巴巴和腾讯从事4年多的技术研发工作,负责过日请求量过亿的Web系统升级与重构,目前在小满科技创业,从事SaaS服务技术建设. 电商的秒杀和抢购,对我们来说,都不是一个陌生的东西. ...

  5. Web大规模高并发请求和抢购的解决方案

    电商的秒杀和抢购,对我们来说,都不是一个陌生的东西.然而,从技术的角度来说,这对于Web系统是一个巨大的考验.当一个Web系统,在一秒钟内收到数以万计甚至更多请求时,系统的优化和稳定至关重要.这次我们 ...

  6. halcon的算子列表

    Chapter 1 :Classification 1.1 Gaussian-Mixture-Models 1.add_sample_class_gmm 功能:把一个训练样本添加到一个高斯混合模型的训 ...

  7. 《zw版·delphi与halcon系列原创教程》zw版_THOperatorSetX控件函数列表 v11中文增强版

    <zw版·delphi与halcon系列原创教程>zw版_THOperatorSetX控件函数列表v11中文增强版 Halcon虽然庞大,光HALCONXLib_TLB.pas文件,源码就 ...

  8. 【问底】徐汉彬:Web系统大规模并发——电商秒杀与抢购

    [导读]徐汉彬曾在阿里巴巴和腾讯从事4年多的技术研发工作,负责过日请求量过亿的Web系统升级与重构,目前在小满科技创业,从事SaaS服务技术建设. 电商的秒杀和抢购,对我们来说,都不是一个陌生的东西. ...

  9. 徐汉彬:Web系统大规模并发——电商秒杀与抢购

    [导读]徐汉彬曾在阿里巴巴和腾讯从事4年多的技术研发工作,负责过日请求量过亿的Web系统升级与重构,目前在小满科技创业,从事SaaS服务技术建设. 电商的秒杀和抢购,对我们来说,都不是一个陌生的东西. ...

  10. 从电商秒杀与抢购谈Web系统大规模并发

    从电商秒杀与抢购谈Web系统大规模并发 http://www.iamlintao.com/4242.html 一.大规模并发带来的挑战 在过去的工作中,我曾经面对过5w每秒的高并发秒杀功能,在这个过程 ...

随机推荐

  1. 1分钟了解HashSet的使用

    前言:刷leetcode的时候体验到hashset有多厉害了,用了他剪枝之后直接不爆超时了.速度大大滴快 使用方法 1.创建set对象Set<Integer>set=new HashSet ...

  2. 假期小结7爬虫学习requests

    这周我初步学习了py爬虫的相关知识,以下是我的部分总结 URL headers(URL头部)是HTTP请求中包含的一部分信息,用于描述.控制和传递请求的各种元数据.它们是位于HTTP请求消息的起始部分 ...

  3. 【杂谈】JPA乐观锁改悲观锁遇到的一些问题与思考

    背景 接过一个外包的项目,该项目使用JPA作为ORM. 项目中有多个entity带有@version字段 当并发高的时候经常报乐观锁错误OptimisticLocingFailureException ...

  4. 从web2的用户名密码登录到web3的钱包签名认证

    Web2 都有哪些常用的认证场景 早期我们使用网页类 Web2 应用时,大多采用账号 + 密码的认证方式访问.为了方便很多网站设置的都是相同的密码(这很不安全). 随着移动应用的普及,慢慢我们习惯了手 ...

  5. Could not retrieve mirrorlist http://mirrorlist.centos.org/?release=7&arch=x86_64&repo=os&infra=stock error was 14: curl#6 - "Could not resolve host: mirrorlist.centos.org; 未知的错误"解决yum下载报错

    报错信息 │ (SSH client, X server and network tools) │ │ │ │ ⮞ SSH session to root@192.168.117.166 │ │ • ...

  6. 局域网主机间的网络测速——适用linux主机和windows主机

    测速软件地址; https://iperf.fr/ 参考: 树莓派集群真的可以顶上一台高性能计算机吗 ============================================ Ubun ...

  7. Java IO 流详解

    概述 流是一个抽象的概念,代表了数据的无结构化传递.流的本质是数据在不同设备之间的传输.在 Java 中,数据的读取和写入都是以流的方式进行的 在 Java 中,根据数据流向的不同,可以将流分为输入( ...

  8. 手把手教你实现Scrapy-Redis分布式爬虫:从配置到最终运行的实战指南

    ## 1.scrapy-redis的环境准备 pip install scrapy-redis 安装完毕之后确保其可以正常导入使用即可. 2. 实现 接下来我们只需要简单的几步操作就可以实现分布式爬虫 ...

  9. Namomo Summer Camp 23 Day 1(GCPC2021)

    Namomo Summer Camp 23 Day 1(GCPC2021) Problem B: Brexiting and Brentering 签到 #include<bits/stdc++ ...

  10. UVA11367 Full Tank?

    优先队列bfs 1 #include<cmath> 2 #include<queue> 3 #include<cstdio> 4 #include<strin ...