【牛客小白月赛117】E题——种类数小结

1 初步想法

1.1 前置知识:vector数组的去重操作

unique()将不重复的元素放在数组前面,重复元素移到后面,qs获取不重复元素的后一个位置,之后用erase()函数去除重复元素。

qs=unique(a.begin()+1,a.begin()+k+1);
a.erase(qs,a.end());

1.2 模拟的解法

根据题目意思,统计数组中不同数的种类数,然后遍历数组,每次减去种类数,直到数组中的元素只有一种为止。在实现上,我的输入的数是从数组a下标1开始,所以我设置的循环条件是a.size()>2,因为a[0]=0,如果碰到输入n个相同的非零整数,此时去重后元素的个数是2。

实现代码(运行超时,只通过30%左右的数据)

#include<bits/stdc++.h>
using namespace std;
int n;
vector<long long> a(100005);
void process(){int k=a.size()-1;for(int i=1;i<=a.size();i++){if(a[i]-k>0) a[i]=a[i]-k;else a[i]=0;}vector<long long>::iterator qs;sort(a.begin()+1,a.begin()+k+1);qs=unique(a.begin()+1,a.begin()+k+1);a.erase(qs,a.end());
}
int main(){cin>>n;for(int i=1;i<=n;i++) cin>>a[i];vector<long long>::iterator qs;sort(a.begin()+1,a.begin()+n+1);qs=unique(a.begin()+1,a.begin()+n+1);a.erase(qs,a.end());long long cnt=0;while(a.size()>2){process();cnt++;}cout<<cnt;return 0;
}

不过这种解法的问题是会超时,数据规模是10的5次方,main函数的while循环加上函数process()里面也有一重循环,效率不高,要想一种新的解法。

2 新方法

2.1 新方法的思想

我设计以下测试样例:

测试样例1
4
100 200 300 400

对于测试样例1,排序后,我们知道100是最先变化为0的,100在减小为0的过程中,种类数已知是4个,所以,100减为0需要进行100/4=25次操作。之后在剩下的数中,100减为0后依次变为100,200,300(是所有数同时减100),对于这里的100要变成0,因为目前数组有4,100,200,300这4种数,需要经过100/4=25次操作。之后,剩下的数以此为100,200,因为目前数组有4,100,200这3种数,100变成0需要经过100/3+1=34次操作(目前数组有),然后剩下一个数98,需要经过98/2=49次操作。一共是25+25+34+49=133次操作。通过这样的做法我们可以降低时间复杂度。

2.2 新方法的实现

为了实现新方法,在数组各元素减为0的过程中,我们要设置几个变量:
ans:最终结果
sum:累计减少量
cnt:当前的种类数,对于非0元素,如果不是第一个,因为前面的数已经变成0,所以非第一个数需要+1,把0算进去。cnt=a.size()-i+(i!=0);
x:表示当前的数变为0需要操作的次数,我们需要向上取整:x=(a[i]-sum+cnt-1)/cnt。

实现代码

#include<bits/stdc++.h>  // 包含所有标准库头文件
#define LL long long    // 定义长整型别名
int n;
using namespace std;int main(){cin>>n;  // 输入数组长度vector<LL> a(n);  // 创建长度为n的长整型向量for(int i=0;i<n;i++) cin>>a[i];  // 输入数组元素// 排序并去重,确保数组是升序且无重复元素sort(a.begin(),a.end());a.erase(unique(a.begin(),a.end()),a.end());// 如果数组只有一个元素,直接输出0if(a.size()==1)cout<<0<<endl;else{LL ans=0,sum=0,cnt=0;  // ans:结果,sum:累计减少量,cnt:当前影响的元素数量// 遍历去重后的数组for(int i=0;i<n;i++){// 如果当前元素减去累计减少量已经小于0,跳过if(a[i]-sum<0) continue;// 计算当前影响的元素数量:剩余元素数 + (如果不是第一个元素,还包括之前的元素)cnt=a.size()-i+(i!=0);// 计算需要多少次操作才能将当前元素减为0// (a[i]-sum+cnt-1)/cnt 是向上取整的技巧LL x=(a[i]-sum+cnt-1)/cnt;ans+=x;  // 累计操作次数sum+=x*cnt;  // 更新累计减少量}cout<<ans<<endl;}return 0;
}

参考

b站讲解

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

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

相关文章

linux之kylin系统nginx的安装

一、nginx的作用 1.可做高性能的web服务器 直接处理静态资源&#xff08;HTML/CSS/图片等&#xff09;&#xff0c;响应速度远超传统服务器类似apache支持高并发连接 2.反向代理服务器 隐藏后端服务器IP地址&#xff0c;提高安全性 3.负载均衡服务器 支持多种策略分发流量…

MatAnyone本地部署,视频分割处理,绿幕抠像(WIN/MAC)

大家好&#xff0c;今天要和大家分享的项目是MatAnyone&#xff0c;与上一篇分享的SAM2LONG类似&#xff0c;不过上次的分享没有提到如何在 MAC 上部署&#xff0c;后来有小伙伴私信说希望能出一个 MAC 版本的。那正好看到MatAnyone这个项目顺手就写下来。该项目基于SAM2同样可…

记录下blog的成长过程

2025-06-11 新人榜83 2025-06-09 新人榜87 北京市原力月榜 80

C语言学习20250611

指针 指针类型 int p;》普通的整形变量int *p;》p先与*结合&#xff0c;表示p为指针&#xff0c;该指针指向的内容的数据类型为整型int p[3];》p为一个由整型数据组成的数组int *p[3];》因为[]比*优先级高&#xff0c;p先与方括号结合&#xff0c;所以p为一个数组&#xff0c…

【AI智能体】Dify 从部署到使用操作详解

目录 一、前言 二、Dify 介绍 2.1 Dify 是什么 2.2 Dify 核心特性 2.2.1 多模型支持 2.2.2 可视化编排工作流 2.2.3 低代码/无代码开发 2.3 Dify 适用场景 2.4 Dify 与Coze的对比 2.4.1 定位与目标用户 2.4.2 核心功能对比 2.4.3 开发体验与成本 2.4.4 适用场景对比…

Java爬虫库的选择与实战代码

如果你的项目正在Java中考虑引入爬虫能力&#xff0c;无论是做数据分析、信息聚合&#xff0c;还是竞品监测&#xff0c;选对库确实能大幅提升开发效率和运行效果。结合当前主流库的特点与适用场景&#xff0c;我整理了一份更贴近实战的对比分析&#xff0c;并附上可直接运行的…

详细解释aruco::markdetection _detectInitialCandidates函数

_detectInitialCandidates 是 OpenCV 的 ArUco 模块中一个非常关键的函数&#xff0c;它负责检测图像中的候选 ArUco 标记。该函数的主要目标是&#xff1a; 使用多个尺度&#xff08;scale&#xff09;对输入图像进行自适应阈值处理&#xff1b;在每个尺度下提取轮廓并筛选出…

Android 开发中配置 USB 配件模式(Accessory Mode) 配件过滤器的配置

在 Android 开发中配置 USB 配件模式&#xff08;Accessory Mode&#xff09; 的配件过滤器&#xff08;accessory_filter.xml&#xff09;&#xff0c;需要以下步骤&#xff1a; 1. 创建配件过滤器文件 在项目的 res/xml/ 目录下创建 accessory_filter.xml 文件&#xff08;若…

FreeRTOS互斥量

目录 1.使用场合2.函数2.1 创建2.1.1 动态创建2.1.2 静态创建 2.2 删除2.3 释放&#xff08;Give&#xff09;2.4 获取&#xff08;Take&#xff09;2.5 ISR 版本注意事项 3.常规使用流程4.和二进制信号量的对比5.递归锁5.1 死锁5.2 概念5.2.1 问题5.2.2 解决方案&#xff1a;递…

ThinkPad 交换 Ctrl 键和 Fn 键

概述 不知道那个大聪明设计的将fn设置在最左边&#xff0c;xxx&#xff0c;我服了&#xff0c;你这个老六真恶心。 方法 一&#xff1a;BIOS/UEFI 设置&#xff08;推荐&#xff09; 重启 你的 ThinkPad。 在启动时按下 F1&#xff08;或 Enter&#xff0c;再按 F1&#xff0…

`dispatch_source_t` 计时器 vs `NSTimer`:核心差异一览

维度GCD 计时器 (dispatch_source_t)NSTimer依赖机制直接挂在 GCD 队列;底层走 Mach 内核定时源挂在 RunLoop,必须指定 RunLoop & mode线程上下文哪个队列就在哪条线程回调(例中用 dispatch_get_main_queue())总在定时器所在的 RunLoop 线程(默认主线程 & NSDefau…

ubuntu22.04系统安装部署docker和docker compose全过程!

更新系统包 首先&#xff0c;确保系统包是最新的&#xff1a; sudo apt updatesudo apt upgrade -y安装依赖 安装 Docker 所需的依赖包&#xff1a; sudo apt install -y apt-transport-https ca-certificates curl software-properties-common添加 Docker 官方 GPG 密钥 添加…

企业如何增强终端安全?

在数字化转型加速的今天&#xff0c;企业的业务运行越来越依赖于终端设备。从员工的笔记本电脑、智能手机&#xff0c;到工厂里的物联网设备、智能传感器&#xff0c;这些终端构成了企业与外部世界连接的 “神经末梢”。然而&#xff0c;随着远程办公的常态化和设备接入的爆炸式…

VS2017----打开ui文件几秒后闪退

问题描述 在vs2017中双击ui文件能够打开,但是几秒后就闪退了,提示报错 问题解决 QT VS tools ----Options,把这个设置为True保存即可

深入解析Docker网桥模式:从docker0到容器网络的完整通信链路

1. 简介docker 网桥模式 Docker 启动时默认创建 docker0 虚拟网桥&#xff08;Linux bridge&#xff09;&#xff0c;并分配私有 IP 地址范围&#xff08;如 172.17.42.1/16&#xff09;&#xff0c;它的作用相当于一个虚拟交换机&#xff0c;让宿主机和多个容器之间可以通信。…

Proof of Talk专访CertiK联创顾荣辉:全周期安全方案护航Web3生态

6月10日&#xff0c;CertiK联合创始人兼CEO顾荣辉在Proof of Talk 2025举办期间&#xff0c;接受大会官方专访&#xff0c;分享了他对Web3安全现状的观察以及CertiK的安全战略布局。 顾荣辉指出&#xff0c;虽然安全的重要性被广泛认可&#xff0c;但许多创业者和开发者仍存在…

再说一说LangChain Runnable接口

之前我们介绍过LangChain通过Runnable和LCEL来实现各个组件的快捷拼装&#xff0c;整个过程就像拼积木一样。 今天我们深入剖析Runnable接口的底层实现逻辑。 往期文章推荐: 16.Docker实战&#xff1a;5分钟搞定MySQL容器化部署与最佳实践15.Ollama模板全解析&#xff1a;从基…

LLaMA-Factory微调Qwen3模型完了,怎么直接用vllm推理模型?

环境&#xff1a; LLaMA-Factory vllm0.8.5 Qwen3-8b 问题描述&#xff1a; LLaMA-Factory微调Qwen3模型完了,怎么直接用vllm推理模型&#xff1f; 解决方案&#xff1a; 一、合并 LoRA 权重与基础模型 vLLM 需要完整的模型文件&#xff08;含合并后的权重&#xff09;…

C#AES加密

一、AES 加密概念 定义 &#xff1a;AES&#xff08;Advanced Encryption Standard&#xff0c;高级加密标准&#xff09;是一种对称加密算法&#xff0c;由美国国家标准与技术研究院&#xff08;NIST&#xff09;于 2001 年发布&#xff0c;用于替代之前的 DES&#xff08;数据…

搞了两天的win7批处理脚本问题

目录 问题 原因&#xff1a; 经过各种对比 解决方法 问题 比如 echo "yes" | find /c /v "" 这个统计非空串的行数&#xff0c;在其它系统都是 1&#xff1b;但在win7里非正常的反应&#xff0c;为空。 原因&#xff1a; 在wvpCheckStart.bat 首…