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

news2024/11/19 16:40:05

前言:

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

正文:

题目:

链接: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.coloradmin.cn/o/1642147.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Spring Cloud学习笔记(Hystrix):execute,queue,observe,toObservable样例和特性

这是本人学习的总结&#xff0c;主要学习资料如下 - 马士兵教育 1、Overview2、execute()2.1、Overview2.2、示例 3、queue()3.1、Overview3.2、示例 4、observe()4.1、Overview4.2、示例 5、toObservable()5.1、observe()和toObservable()的区别 1、Overview 我们知道Hystrix…

一文看懂卷积神经网络CNN(1)—前馈神经网络

目录 参考资料 一、神经网络 1、人脑神经网络 2、人工神经网络 3、神经网络的发展历史 二、前馈神经网络 1、神经元 &#xff08;1&#xff09;Sigmoid型函数 ① Logistic函数 ②Tanh函数 ③两个函数形状对比 &#xff08;2&#xff09;ReLU函数 ① 带泄露的ReLU函…

vue 设置输入框只能输入数字且只能输入小数点后两位,并且不能输入减号

<el-input v-model.trim"sb.price" placeholder"现价" class"input_w3" oninput"valuevalue.replace(/[^0-9.]/g,).replace(/\.{2,}/g,.).replace(/^(\-)*(\d)\.(\d\d).*$/,$1$2.$3)"/> 嘎嘎简单、、、、、、、、、

微软如何打造数字零售力航母系列科普08 - Yobe 如何联手微软Azure,安全使用客户数据,预测客户购买行为?

Yobe 如何联手Azure&#xff0c;安全使用客户数据&#xff0c;预测客户购买行为&#xff1f; 在当今数据驱动的世界中&#xff0c;了解客户行为并有能力通过数据和分析预测客户意图是企业保持竞争力所应具备的首要优势。Yobi由Max Snow、Bill Wise和Tom Griffiths于2019年创立&…

【软考高项】三十一、成本管理4个过程

一、规划成本管理 1、定义、作用 定义&#xff1a;确定如何估算、预算、管理、监督和控制项目成本的过程作用&#xff1a;在整个项目期间为如何管理项目成本提供指南和方向 应该在项目规划阶段的早期就对成本管理工作进行规划&#xff0c;建立各成本管理过程的基本框架&…

题目:极速返航

问题描述&#xff1a; 解题思路&#xff1a; 看到题目要求最大值最小&#xff0c;最小值最大&#xff1a;一眼二分答案。二分的时间复杂度是O(log n)。 二分枚举可能的答案X。check()函数判断合法情况。 AC代码&#xff1a; #include<bits/stdc.h> using namespace std…

算法课程笔记——蓝桥云课第六次直播

&#xff08;只有一个数&#xff0c;或者因子只有一个&#xff09;先自己打表&#xff0c;找找规律函数就是2的n次方 异或前缀和 相等就抵消 先前缀和再二分

OpenCV(一) —— OpenCV 基础

1、OpenCV 简介 OpenCV&#xff08;Open Source Computer Vision Library&#xff09;是一个基于 BSD 许可开源发行的跨平台的计算机视觉库。可用于开发实时的图像处理、计算机视觉以及模式识别程序。由英特尔公司发起并参与开发&#xff0c;以 BSD 许可证授权发行&#xff0c…

【深度学习】位置编码

一、引言 Self-Attention并行的计算方式未考虑输入特征间的位置关系&#xff0c;这对NLP来说是不可接受的&#xff0c;毕竟一个句子中每个单词都有着明显的顺序关系。Transformer没有RNN、LSTM那样的顺序结构&#xff0c;所以Transformer在提出Self-Attention的同时提出了Posi…

ruoyi漏洞总结

若依识别 黑若依 :icon hash"-1231872293 绿若依 :icon hash"706913071” body" 请通过前端地址访 " body" 认证失败&#xff0c;无法访问系统资源 " 如果页面访问显示不正常&#xff0c;可添加默认访问路径尝试是否显示正常 /login?redi…

STM32 F103C8T6学习笔记17:类IIC通信(SMBus协议)—MLX90614红外非接触温度计

今日学习配置MLX90614红外非接触温度计 与 STM32 F103C8T6 单片机的通信 文章提供测试代码讲解、完整工程下载、测试效果图 本文需要用到的大概基础知识&#xff1a;1.3寸OLED配置通信显示、IIC通信、 定时器配置使用 这里就只贴出我的 OLED驱动方面的网址链接了&#xff1a…

QT+串口调试助手+基本版

一、创建串口调试助手UI界面 1、首先生成串口连接必要参数界面&#xff0c;删除关闭串口控件 2、给参数下拉框添加常见的选项&#xff0c;删除关闭串口控件 3、将串口调试助手参数界面布局整齐&#xff0c;删除关闭串口控件 4、更改控件名字&#xff0c;方便后续编程&#xff…

深度学习中权重初始化的重要性

深度学习模型中的权重初始化经常被人忽略&#xff0c;而事实上这是非常重要的一个步骤&#xff0c;模型的初始化权重的好坏关系到模型的训练成功与否&#xff0c;以及训练速度是否快速&#xff0c;效果是否更好等等&#xff0c;这次我们专门来看看深度学习中的权重初始化问题。…

stm32之hal库串口中断和ringbuffer的结合

前言 结合hal库封装的中断处理函数使用rt-thread内部的rt-ringbuffer数据结构源码改造hal库串口部分的源码&#xff0c;将内部静态方法变为弱引用的函数&#xff0c;方便重写标志位采用信号量或变量的两种方式&#xff0c;内部数据分配方式采用动态和静态两种方式 hal库部分串…

qt嵌入并控制外部程序

一、流程 1、调用Window接口模拟鼠标&#xff0c;键盘事件 POINT point; LPPOINT lpppoint &point; GetCursorPos(lpppoint);//获取鼠标位置 SetCursorPos(point.x, point.y);//设置鼠标位置//鼠标左键按下 mouse_event(MOUSEEVENTF_LEFTDOWN | MOUSEEVENTF_LEFTUP, poi…

.单链表.

单链表就是将所要求得的数据呈现在一条链上进行求解。(用一种链式结构存储数据&#xff0c;这种结构就称之为链表) 题目&#xff1a; 实现一个单链表&#xff0c;链表初始为空&#xff0c;支持三种操作&#xff1a; 向链表头插入一个数&#xff1b;删除第 k&#x1d458; 个插…

Mysql报错红温集锦(一)(ipynb配置、pymysql登录、密码带@、to_sql如何加速、触发器SIGNAL阻止插入数据)

一、jupyter notebook无法使用%sql来添加sql代码 可能原因&#xff1a; 1、没装jupyter和notebook库、没装ipython-sql库 pip install jupyter notebook ipython-sql 另外如果是vscode的话还需要安装一些相关的插件 2、没load_ext %load_ext sql 3、没正确的登录到mysql…

Hibernate入门学习

目录 1、ORM思想概述 2、自定义ORM框架 3、第一个Hibernate程序开发步骤&#xff08;重要&#xff09; 1&#xff09;下载完整包 2&#xff09;创建项目&#xff0c;导入所需jar包 3&#xff09;建立student表 4&#xff09;创建和student表对应的Student实体类 5&…

Sarcasm detection论文解析 |A2Text-Net:一种用于讽刺检测的新型深度神经网络

论文地址 论文地址&#xff1a;A2Text-Net: A Novel Deep Neural Network for Sarcasm Detection | IEEE Conference Publication | IEEE Xplore github:lliyuan1117/A2Text-Net (github.com) 论文首页 A2Text-Net&#xff1a;一种用于讽刺检测的新型深度神经网络 &#x1f4c5…

Gradle 进阶学习 之 build.gradle 文件

build.gradle 是什么&#xff1f; 想象一下&#xff0c;你有一个大型的乐高项目&#xff0c;你需要一个清单来列出所有的乐高积木和它们如何组合在一起。在软件开发中&#xff0c;build.gradle 就是这个清单&#xff0c;它告诉计算机如何构建&#xff08;组合&#xff09;你的软…