【2023百度之星备赛】码蹄集 BD202301 第五维度(二分 + 贪心)

news/2025/2/12 5:33:20/

题目

https://www.matiji.net/exam/brushquestion/3/4347/179CE77A7B772D15A8C00DD8198AAC74?from=1

题目大意:给定n个科学家每秒获得理解力的大小和开始理解的时间,给定理解第五维度需要的总理解力。同时,可以随机让一位科学家在某一时刻消失,其理解力清0,并之后不会再产生理解力。求在尽可能晚的情况下,人类理解第五维度的最早时间点(最晚最早问题)。

分析

看了很多题解,都给了这么一句话:一般看到最(大/小)的最(小/大),都是用二分求解。所以这里可以对人类理解第五维度的时间点进行二分,由于求的是最早时间点,所以应该用if check(mid) r = mid; else l = mid + 1;的模板(二分模板参考:https://blog.csdn.net/destiny_balabala/article/details/104892394)。

对于check()函数,作用是判断二分的答案是否能满足所有科学家的累计贡献度超过m。由于要求尽可能晚的让人类理解第五维度,所以在计算累计贡献度的时候,需要排除掉贡献度最大的科学家(贪心的思想)。

时间复杂度方面,二分最小值是1,最大值是m(数据范围中,理解力大的最大值)每次check函数求累计贡献度需要执行n次(数据范围中,科学家的数量),所以复杂度为 O ( n l o g 2 m ) O(nlog_2m) O(nlog2m)。题目中,m最大为 2 ∗ 1 0 9 2*10^9 2109,n最大为 1 0 5 10^5 105。所以 l o g 2 m = l o g 2 2 ∗ 1 0 9 < l o g 2 2 ∗ 1 6 9 < l o g 2 2 ∗ 2 36 = 37 log_2m = log_22*10^9 < log_22*16^9<log_22*2^{36}=37 log2m=log22109<log22169<log22236=37 n l o g 2 m < n ∗ 37 = 3.7 ∗ 1 0 6 nlog_2m<n*37=3.7*10^6 nlog2m<n37=3.7106,所以不会超时。

代码

#include<bits/stdc++.h> using namespace std;typedef long long ll;const int N = 100010;
int n, m;
int s[N], v[N];int check(ll t) {// 如果能让人类理解第五维度,则返回1;否则返回0 ll sum = 0, _max = -1;for(int i = 0; i < n; i ++ ) {ll cur = max((t - s[i]) * v[i], 0ll); // s * v最大可能为10^12,所以这里要用long long_max = max(_max, cur);sum += cur;} return sum - _max > m;
}int main( )
{scanf("%d%d", &n ,&m);for(int i = 0; i < n; i ++ ) scanf("%d%d", &s[i], &v[i]);ll l = 1, r = 2e9;ll ans = -1;while (l < r) {int mid = l + r >> 1;if (check(mid)) { r = mid;ans = mid;}else l = mid + 1;}cout << ans << endl;return 0;
}

总结

求最(大/小)的最(小/大)的问题,一般使用二分解决:

  • 二分用来解决后面的最,并且根据是求最大值还是最小值确定二分模板的写法
  • 二分的check函数用来解决前面的最

http://www.ppmy.cn/news/1080836.html

相关文章

Nginx百科之gzip压缩、黑白名单、防盗链、零拷贝、跨域、双机热备

引言 早期的业务都是基于单体节点部署&#xff0c;由于前期访问流量不大&#xff0c;因此单体结构也可满足需求&#xff0c;但随着业务增长&#xff0c;流量也越来越大&#xff0c;那么最终单台服务器受到的访问压力也会逐步增高。时间一长&#xff0c;单台服务器性能无法跟上业…

【原创】H3C三层交换机VLAN路由

网络拓扑图 VLAN 配置 VLAN 100 VLAN 200 [H3C]int vlan 100 ip address 1.1.1.1 255.255.255.0[H3C-Vlan-interface100]int vlan 200 ip address 2.2.2.1 255.255.255.0[H3C]int GigabitEthernet 1/0/1port access vlan 100[H3C]int GigabitEthernet 1/0/2port access vlan 2…

使用Git和Github上传代码文件

1. 先检查是否安装好git git --version2. 输入你的github用户名 git config --global user.name "用户名"3. 输入你的github邮件 git config --global user.email "邮件地址"4. 设定git推送本地仓库中与远程仓库中具有相同名称的所有分支。 git config…

DevOps理念:开发与运维的融合

在现代软件开发领域&#xff0c;DevOps 不仅仅是一个流行的词汇&#xff0c;更是一种文化、一种哲学和一种方法论。DevOps 的核心理念是通过开发和运维之间的紧密合作&#xff0c;实现快速交付、高质量和持续创新。本文将深入探讨 DevOps 文化的重要性、原则以及如何在团队中实…

mysql异常占用资源排查

通过执行日志与连接信息排查 查看是否开启日志记录 mysql> show global variables like %general%; --------------------------------- | Variable_name | Value | --------------------------------- | general_log | OFF | | general_log_file…

Git——Windows平台创建gitee私有仓库详解

目录 1. 安装git 2. gitbash配置 2.1 设置 2.2 生成key 2.3 项目管理 2.3.1 本地新建 2.3.2 clone远程仓库的工程到本地改文件 1. 安装git 默认安装。 2. gitbash配置 2.1 设置 打开gitbash&#xff0c;设置用户名和邮箱&#xff1a; git config --global user.name …

Citespace、vosviewer、R语言的文献计量学 、SCI

文献计量学是指用数学和统计学的方法&#xff0c;定量地分析一切知识载体的交叉科学。它是集数学、统计学、文献学为一体&#xff0c;注重量化的综合性知识体系。特别是&#xff0c;信息可视化技术手段和方法的运用&#xff0c;可直观的展示主题的研究发展历程、研究现状、研究…

【Linux】进程的优先级

我们都知道进程等待需要cpu处理的&#xff0c;那就需要一个数据结构来记录要被cpu处理的进程&#xff0c;那这些进程是按一个什么样的方式在这个结构中进行等待呢&#xff1f;下面就要谈到进程的优先级了&#xff1a; 目录 一、进程的优先级的概念 二、查看进程的优先级 2.1…