2024牛客五一集训派对day2 Groundhog Looking Dowdy 个人解题思路

前言:

  被实验室教练要求要打的这次五一牛客的训练赛,这些区域赛难度的题对于大一的我来说难度实在是太高了,我和我的队友只写了一些非常简单的签到题,其他题目都没怎么看(我们太弱了),但我可以分享一下我能做出来的题的思路。

正文:

题目:

链接:F-Groundhog Looking Dowdy_2024牛客五一集训派对day2 (nowcoder.com)

题意:

  告诉你有n天,每天都有j个数字,让你每天选出当天(第i天)的其中1个,让你求出n天中m天(m<=n)选出的数字的最小的数字最大值与最小值的差值。

  比如样例,共4天,我们需要选3天,最小的差值当且仅当选1,3,4天时,这时这3天中最大的是3,最小的是1,差值为2。2为最小差值,所以输出2。

思路:

    一:

  我们不妨定义一个结构体,包含一个数字和它所在的天数。将这些结构体按数字大小排序,这样我们就得到了一串递增或递减的数组,我们要求出的答案一定是这个数组的一段连续的子数组(数组中连续的一小段)的左右两端的差值的绝对值(表示最大值与最小值的差值),同时我们要让这段子数组合理(数组中数字代表的不同天数的个数为m),如此我们就能得到答案。

  首先我先考虑了暴力的算法,通过两层循环,第一层找开始的第一个数字,第二层遍历到满足子数组条件的第一个的数字上,两个数字相减就是答案。这个思路显然是没问题的,但是明显两层循环处理1e6的数据量会超时,我们得想办法优化掉暴力的算法。

   二:

  我们可以发现通过循环遍历找这段数组十分耗时,我们没必要一遍又一遍的从第一层循环的数字开始找,我们可以设计两个指针,一个指向第一个数字,一个指向后面的一个数字,当这段数字满足条件时就记录下这个数字并移动左指针,若不满足则考虑移动右指针,这样的方式叫滑动窗口(不懂的可以看看这篇博客 滑动窗口详解_窗口滑动-CSDN博客)。我们可以通过桶排的方式来记录天数数量,每次移动指针时再判断天数数量是否等于m,在所有符合答案的数字中找最小值输出即可。代码如下。

#include <bits/stdc++.h>
using namespace std;
const int N=2e6+5;
typedef struct node{int a;int day;
}node;
node b[N];
int book[N];
bool cmp(node x,node y){return x.a<y.a;
}
int n,m,ans=1000000000;
int main(){cin>>n>>m;int cnt=1;for(int i=1;i<=n;i++){int x;cin>>x;for(int j=1;j<=x;j++){cin>>b[cnt].a;b[cnt].day=i;cnt++;}}cnt--;sort(b+1,b+cnt+1,cmp);for(int i=1,j=m;i<=cnt&&j<=cnt&&i<j;){int diff=0;memset(book,0,sizeof(book));for(int k=i;k<=j;k++){if(!book[b[k].day]){diff++;book[b[k].day]++;}}if(diff==m){//  cout<<b[j].a<<" "<<b[i].a<<endl;ans=min(ans,b[j].a-b[i].a);j++;}if(diff>m)i++;if(diff<m)j++;//  cout<<i<<" "<<j<<" "<<diff<<" "<<endl;}cout<<ans<<endl;
}

三:

但是这段代码依旧超时了,主要是每次记录天数数量都要从子数组的开始到结束,极大增加了不必要的运算。对于diff,我们可以根据指针的改变来动态维护,这样就避免了不必要的运算,最后结果终于ac了(943ms,比较极限),代码如下:

#include <bits/stdc++.h>
using namespace std;
const int N=2e6+5;
typedef struct node{int a;int day;
}node;
node b[N];
int book[N];
bool cmp(node x,node y){return x.a<y.a;
}
int n,m,ans=1000000000;
int main(){cin>>n>>m;int cnt=1;int diff=0;for(int i=1;i<=n;i++){int x;cin>>x;for(int j=1;j<=x;j++){cin>>b[cnt].a;b[cnt].day=i;cnt++;}}cnt--;sort(b+1,b+cnt+1,cmp);for(int i=1;i<=m;i++){if(!book[b[i].day]){diff++;book[b[i].day]++;}}int l=1,r=m;while(diff<m){r++;if(!book[b[r].day]){diff++;book[b[r].day]++;}}while(r<=cnt){//	cout<<b[r].a<<" "<<b[l].a<<endl;ans=min(ans,b[r].a-b[l].a);book[b[l].day]--;l++;if(book[b[l-1].day]==0) diff--;while(diff<m&&r<=cnt){r++;if(!book[b[r].day]){diff++;book[b[r].day]++;}}}cout<<ans<<endl;
}

后记:

  这是我第一次详细的写自己的解题思路,文章难免有点生疏,希望读者见谅。同时也欢迎各位来提出建议和讨论。

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

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

相关文章

使用Gradio搭建聊天UI实现质谱AI智能问答

使用Gradio搭建聊天UI实现质谱AI智能问答 一、调用智谱 AI API二、使用Gradio搭建聊天UI三、将流式处理添加到交互式聊天机器人 一、调用智谱 AI API 1、获取api_key 智谱AI开放平台网址&#xff1a; https://open.bigmodel.cn/overview 2、安装库pip install zhipuai 3、执…

[笔试训练](十六)

目录 046:字符串替换 047:神奇数 048:DNA序列 046:字符串替换 字符串替换_牛客题霸_牛客网 (nowcoder.com) 题目&#xff1a; 题解&#xff1a; 简单模拟题~ class StringFormat { public:string formatString(string str, int n, vector<char> arg, int m) {strin…

API开发的必备神器:华为云CodeArts API实用体验入门篇

今天我想给大家推荐一款API全生命周期研发与管理工具&#xff1a;华为云CodeArts API。 作为互联网软件的开发者&#xff0c;在软件研发的过程中&#xff0c;API的开发、调试、测试是必不可少的。之前我使用的是Postman这类工具来辅助开发&#xff0c; Postman在接口调试方面确…

WPF TextBox文本框 输入提示

思路 Grid标签里面创建Label和TextBox&#xff0c;这是一个整体。 TextBox 为空显示 Label OR TextBox 不为空隐藏 Label 。 注意 两个标签的前后顺序。 TextBox文本的背景颜色设置为透明&#xff0c;不然会无法看到 Label 内容。 ElementNametxtStoreName&#xff1a;指定…

Microsoft Universal Print 与 SAP 集成教程

引言 从 SAP 环境打印是许多客户的要求。例如数据列表打印、批量打印或标签打印。此类生产和批量打印方案通常使用专用硬件、驱动程序和打印解决方案来解决。 Microsoft Universal Print 是一种基于云的打印解决方案&#xff0c;它允许组织以集中化的方式管理打印机和打印机驱…

Shell变成规范与变量

目录 1. Shell脚本 1.1 Shell脚本概述 1.2 Shell的作用 1.3 Shell脚本的构成 2. 重定向与管道操作 2.1 交互式硬件设备 ​ 2.2 重定向操作 3. shell变量 3.1 自定义变量 3.2 变量的作用范围​编辑 3.3 整数变量的运算 4. 环境变量 4.1 特殊的Shell变量 4.2 只读变…

【Flask 系统教程 5】视图进阶

类视图 在 Flask 中&#xff0c;除了使用函数视图外&#xff0c;你还可以使用类视图来处理请求。类视图提供了一种更为结构化和面向对象的方式来编写视图函数&#xff0c;使得代码组织更清晰&#xff0c;并且提供了更多的灵活性和可扩展性。 创建类视图 要创建一个类视图&am…

家用洗地机应该怎么选?哪个牌子好?市场上主流洗地机品牌推荐

洗地机的出现&#xff0c;让越来越多的家庭享受清洁的过程&#xff0c;给人们腾出来更多的时间陪伴家人和休息。但是在选购一台洗地机前&#xff0c;大家多多少少肯定有些疑问&#xff0c;洗地机到底实不实用&#xff1f;好不好用&#xff1f;能扫干净吗&#xff1f;还有哪些好…

什么样的行业适合做私域?

私域营销适用于各种行业&#xff0c;但以下几个行业尤其适合进行私域营销&#xff1a; 1、零售行业&#xff1a;私域营销可以帮助零售企业建立与顾客的直接联系&#xff0c;提高顾客忠诚度和复购率。通过私域营销&#xff0c;零售企业可以进行个性化推荐、定制化服务&#xff…

Konga域名配置多个路由

云原生API网关-Kong部署与konga基本使用 Nginx server{listen 443 ssl;location / {proxy_pass http://127.0.0.1:8100;}location /openApi {proxy_pass http://172.31.233.35:7100/openApi;} } Kong {"id": "f880b21c-f7e0-43d7-a2a9-221fe86d9231&q…

vue视图不刷新强制更新数据this.$forceUpdate()

在vue中&#xff0c;更新视图数据&#xff0c;不刷新页面&#xff0c;需要强制更新数据才可以 前言 在对数据就行添加和删除时&#xff0c;发现页面视图不更新&#xff0c;排除发现需要强制更新才可以 点击添加或删除&#xff0c;新增数据和删除就行&#xff0c;但在不使用fo…

指定地区|CSC高级研究学者赴澳大利亚访学交流

CSC高级研究学者均是正高或博导级的&#xff0c;学术背景较强&#xff0c;多数能DIY联系到国外合作机构。但也有些申请者因指定地域或学校&#xff0c;或须在短期内获取邀请函故而求助于我们。本案例D教授就指定澳大利亚的墨尔本地区&#xff0c;我们最终用维多利亚大学的邀请函…

智能化采购管理系统助力光伏行业提高效率

光伏行业是指太阳能电池板的制造、安装和维护等相关产业&#xff0c;是新能源领域的重要组成部分。近年来&#xff0c;随着全球对于环保和可持续发展的重视&#xff0c;光伏行业进入全球化和智能化的新阶段。光伏企业开始加强国际合作&#xff0c;推广智能化技术&#xff0c;提…

vue3+ts+vant选择器选中文字效果

所需要的样式: 选中某个选项后文字有放大和改变颜色的效果 主要就是在van-picker上加class, 给对应的style样式即可 <van-pickerclass"custom-picker":title"pickerData.titleText"v-if"pickerData.ispicker"show-toolbar:columns"col…

数据结构——排序算法分析与总结

一、插入排序 1、直接插入排序 核心思想&#xff1a;把后一个数插入到前面的有序区间&#xff0c;使得整体有序 思路&#xff1a;先取出数组中第一个值&#xff0c;然后再用tmp逐渐取出数组后面的值&#xff0c;与前面的值进行比较&#xff0c;假如我们进行的是升序排序&…

代谢组数据分析七:从质谱样本制备到MaxQuant搜库

前言 LC-MS/MS Liquid Chromatography-Mass Spectrometry&#xff08;LC-MS/MS &#xff0c;液相色谱-质谱串联&#xff09;可用于残留化合物检测、有机小分子检测、鉴定和定量污染物以及在医药和食品领域添加剂检测和生物小分子等检测。 LC-MS/MS一般包含五个步骤&#xff…

熟悉Redis吗,那Redis的过期键删除策略是什么

对于Redis&#xff0c;我们业务开发一般都只关心Redis键值对的查询、修改操作&#xff0c;可能因为懒或者只想能用就行&#xff0c;呵呵。很少关心键值对存储在什么地方、键值对过期了会怎么样、Redis有没什么策略处理过期的键、Redis处理过期键又有什么作用&#xff1f;但这些…

LabVIEW智能变电站监控系统设计与实现

LabVIEW智能变电站监控系统设计与实现 随着电力系统和智能化技术的快速发展&#xff0c;建立一个高效、可靠的变电站监控系统显得尤为重要。通过分析变电站监控系统的需求&#xff0c;设计了一个基于LabVIEW软件的监控平台。该平台利用虚拟仪器技术、传感器技术和无线传输技术…

5W 1.5KVDC 隔离 宽电压输入 DC/DC 电源模块——TP05DB 系列

TP05DB系列电源模块额定输出功率为5W&#xff0c;应用于2:1及4:1电压输入范围 4.5V-9V、9V-18V、18V-36V、36V-72V、9V-36V和18V-72V&#xff0c;40-160VDC的输入电压环境&#xff0c;输出电压精度可达1%&#xff0c;具有输出过流保护等功能。可广泛应用于通信、铁路、自动化以…

机器学习 | 时间序列预测中的AR模型及应用

自回归模型&#xff0c;通常缩写为AR模型&#xff0c;是时间序列分析和预测中的一个基本概念。它们在金融、经济、气候科学等各个领域都有广泛的应用。在本文中&#xff0c;我们将探索自回归模型&#xff0c;它们如何工作&#xff0c;它们的类型和实际例子。 自回归模型 自回…