蓝桥杯2024年第十五届省赛真题-拔河

server/2024/10/18 5:50:40/

在这里插入图片描述
审题可能会遇到的问题:认为所有人都必须参与拔河,但其实不用,只要符合l1<=r1<l2<=r2就行,不一定要全部人上场,比如只上场a1和a2他们的力量差是1其实也可以。

正解思路:前缀和+枚举+二分。枚举左区间,利用二分来选择右区间。时间复杂度O(N^2*logn)能满足题目要求。先利用前缀和求出任意两点间的区间和,然后存入multiset中。然后枚举左区间的右端点,期间先删除以这个右端点为左端点的右区间,然后再枚举左区间,在所有右区间中,找到和左区间值最近的右区间(一个大于它一个小于它),然后计算差值,记录答案。

  • 使用前缀和能化简求任意区间和的过程,不用前缀和复杂度为O(n^3)超时。
  • 用lower_bound(s.begin(),s.end(),k)速度会比s.lower_bound(k) 慢非常多,使用会超时,原因见文末。
  • 这道题输入较多,需要取消输入输出同步流,否则会超时
#include<bits/stdc++.h>
using namespace std;
#define int long long
#define endl '\n'
#define pp ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
const int N = 1e3+10;//不去重的排序集合
multiset<int>s;int a[N];void solve(){//这道题数据量比较多,如果不取消同步流会超时pp;int n;cin>>n;//计算前缀和,方便计算任意区间之和for(int i=1;i<=n;i++)cin>>a[i],a[i]+=a[i-1];//计算区间之和for(int i=1;i<=n;i++)for(int j=i;j<=n;j++)//j==i时,前缀和的差分是原数列//j!=i时,是[i,j]之间的区间和s.insert(a[j]-a[i-1]);int res = INT_MAX;//i是左区间的右端点,注:左区间的右端点不能等于n,因为l2!=r1for(int i=1;i<n;i++){/*删除以i为左端点的所有区间,因为接下来选择右区间用不到,右区间是从i+1开始选择并且在i往后拓展时,如果保留之前的以i为左端点的右区间之和,会干扰正确答案剩下的s就是所有满足以i为左区间右端点的右区间。*/for(int j=i;j<=n;j++){auto add = a[j]-a[i-1];s.erase(s.find(add));}//枚举左区间,选择正确的右区间,计算力量值之和差距最小for(int j=1;j<=i;j++){//左区间之和auto k = a[i]-a[j-1];//寻找与左区间值最近的右区间/**lower_bound(s.begin(), s.end(), k)比s.lower_bound(k)慢很多*/auto p = s.lower_bound(k);//大于等于k最近的右区间if(p!=s.end())res = min(res,abs(*p-k));//小于k最近的右区间if(p!=s.begin()){p--;res = min(res,abs(*p-k));}}}cout<<res<<endl;
}signed main(){int T=1;while(T--)solve();return 0;
}

用lower_bound(s.begin(),s.end(),k)速度会比s.lower_bound(k) 慢非常多的原因:

这是因为 lower_bound() 函数是通用的,适用于各种容器类型,而 s.lower_bound(k) 是特定于某个具体容器类型(比如set 或 map)的成员函数。在调用 lower_bound() 时,编译器必须解析和调用一个通用的函数模板,而s.lower_bound(k) 可以直接在编译时确定具体容器类型,并且可以根据该类型进行一些优化。这种差异可能会导致通用的 lower_bound()操作稍微慢一些,因为它需要更多的模板解析和额外的参数推断。但通常情况下,这种差异不会非常显著,除非你在非常大的数据集上运行,并且对性能有极高的要求。


http://www.ppmy.cn/server/13223.html

相关文章

墨子web3时事周报

蚂蚁集团Web3研发进展与布局 国内Web3赛道的领军企业——蚂蚁集团&#xff0c;凭借其在前沿科技领域的深耕不辍&#xff0c;已在Web3技术研发疆域缔造了卓越战绩。特别是在引领行业革新的关键时刻&#xff0c;集团于今年四月末震撼推出了颠覆性的Web3全套解决方案&#xff0c…

广州大学《虚拟现实与游戏开发》实验报告一HTC-VR环境搭建与开发

广州大学学生实验报告 开课实验室&#xff1a; 学院 年级、专业、班 姓名 学号 实验课程名称 虚拟现实与游戏开发 成绩 实验项目名称 1. HTC-VR环境搭建与开发 指导老师 实验目的 HTC VIVE硬件安装虚拟现实开发环境搭建 3.熟悉虚拟现实硬件系统和…

【HTML】页面引用Vue3和Element-Plus

在现代前端开发中&#xff0c;Vue 3 和 Element Plus 是非常受欢迎的技术。Vue 3 是一个用于构建用户界面的渐进式 JavaScript 框架&#xff0c;而 Element Plus 是一个基于 Vue 3 的组件库&#xff0c;提供了丰富的 UI 组件&#xff0c;帮助开发者快速构建高质量的前端应用。 …

C++11统一列表初始化,initializer_list

目录 1.C11统一了列表的初始化 2.initializer_list 3.initializer_list是如何支持的 1.C11统一了列表的初始化 现在无论内置类型和自定义类型都可以用列表初始化。 class Date {public:Date(int year, int month, int day):_year(year),_month(month),_day(day) {}private:…

vue element ui 打开弹窗出现黑框问题

文章目录 问题描述解决方案 问题描述 大家好&#xff01;今天是2024年4月20日 | 农历三月十二&#xff0c;周六的我又做在公司里面写起了代码 今天在做项目的时候遇到一个奇怪的问题&#xff0c;如下图所示&#xff1a; 因为这个页面我做了两个弹框&#xff0c;先弹出来第一个弹…

ArcGIS无法链接在线地图或错误: 代理服务器从远程服务器收到了错误地址(验证服务器是否正在运行)。

这几天我们分享了&#xff01; 谷歌卫星影像图归来&#xff01;ArcGIS直连&#xff01;快来获取_谷歌影像lyr-CSDN博客文章浏览阅读666次&#xff0c;点赞11次&#xff0c;收藏9次。大概。_谷歌影像lyrhttps://blog.csdn.net/kinghxj/article/details/137521877一套图源搞定&a…

Qt Android 动态加载动态库失败

问题描述 经过了七七四十九个劫难后程序终于稳定运行起来了&#xff0c;正当我以为完美时&#xff0c;问题又找上门了&#xff0c;QML 里面的二维码图片加载不起来了&#xff0c;这个图片还不是本地图片&#xff0c;是实时生成的。 开始的时候并没有下面日志输出&#xff0c;…

Java-反射

一、反射机制 1.反射介绍 &#xff08;1&#xff09;反射机制允许程序在执行期借助于ReflectionAPI取得任何类的内部信息(比如成员变量&#xff0c;构造器&#xff0c;成员方法等等),并能操作对象的属性及方法。反射在设计模式和框架底层都会用到 &#xff08;2&#xff09;…