1030 完美数列 (20)(测试点4,5)

news2024/11/18 0:41:28

给定一个正整数数列,和正整数 p,设这个数列中的最大值是 M,最小值是 m,如果 M≤mp,则称这个数列是完美数列。

现在给定参数 p 和一些正整数,请你从中选择尽可能多的数构成一个完美数列。

输入格式:

输入第一行给出两个正整数 N 和 p,其中 N(≤105)是输入的正整数的个数,p(≤109)是给定的参数。第二行给出 N 个正整数,每个数不超过 109。

输出格式:

在一行中输出最多可以选择多少个数可以用它们组成一个完美数列。

输入样例:

10 8
2 3 20 4 5 1 6 7 8 9

输出样例:

8

 这道题目我想到的思路其实很简单:

它不是让我们求M<=m*p的最大长度嘛,所以,我们可以先将我们的输入数组进行排序然后,从小到大依次遍历,每个乘以p然后找出第一个大于m*p的索引值减去当前索引,这就是一个完美队列的长度,我们依次遍历,找出最长的长度为止。

但是测试点4和测试点5难住了我,经过我的多次测试我发现了关于这两个测试点的解决方法。下面我会提及我的方法的。

//完整代码
#include <iostream>
#include <algorithm>
using namespace std;

int main() {
    int N, p;
    int arr[100000]={0};
    int max=0;
    cin >> N >> p;

    for (int i = 0; i < N; i++) {      //输入
        cin >> arr[i];
    }
    
    sort(arr, arr + N);                // 排序,升序
    int j=0;
    for(int i=0;i<N;i++){
        long m=arr[i];      //记录m*p值   一定要写long不然测试点5错误
        while (m*p>=arr[j]&&j<N) {
            j++;
        }
        int cha=j-i;
        if(cha>max){    //更新最大长度
            max=cha;
        }
    }
    cout <<max;
    

    return 0;
}

 步骤:

输入——排序——遍历(从小到大,索引值相减得到长度)——更新最大长度——输出

测试点4:测试点4是一个庞大输入的测试点,我们很容易会运行超时,就比如在遍历的时候,一个变量定义的位置搞不好都会导致超时:

//正确的遍历
int j=0;
for(int i=0;i<N;i++){
    long m=arr[i];      //记录m*p值   一定要写long不然测试点5错误
    while (m*p>=arr[j]&&j<N) {
         j++;
    }
    int cha=j-i;
    if(cha>max){    //更新最大长度
        max=cha;
    }
 }
//错误的遍历
for(int i=0;i<N;i++){
    long m=arr[i];      //记录m*p值   一定要写long不然测试点5错误

    int j=i;                 //定义放在里面

    while (m*p>=arr[j]&&j<N) {
        j++;
    }
    int cha=j-i;
    if(cha>max){    //更新最大长度
        max=cha;
    }
}

就是这一个很小的点,我把int j=0的定义放在外面就不会导致报错,而我放在里面(当时我还觉得我将int j=i这样也会减少循环次数呢)就会导致运行超时。

所以我们还是需要注意变量定义的位置的。

 而测试点5也是把我搞糊涂了,解决方法是在遍历的时候,我们需要将输入值改成long型才行。注意long m=arr[i];不能在这一步将他写成long mp=arr[i]*p理由就是其中 arr[i] 和 p 都是整型变量。在这种情况下,乘法运算将按照整型运算进行,并且结果的类型也是整型。如果乘法操作的结果超出了整型的范围,就会导致溢出,得到错误的结果。

 

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

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

相关文章

项目解决方案:商务大楼(大厦)网络高清视频监控建设方案

目 录 第1章、前言 第2章、高清监控系统概述 第3章、设计原则 第4章、设计规范和依据 第5章、 系统总体设计 5.1 系统逻辑图 5.2 系统技术架构图 5.3 系统网络拓扑图 5.4 系统工作原理 5.4.1 前端监控资源采集 5.4.2前端监控资源采集 5.4.3 终端平台系统…

【Redis】网络模型

前言 Redis&#xff08;Remote Dictionary Server&#xff09;是一个开源的高性能键值对存储系统&#xff0c;广泛用于各种网络应用中作为数据库、缓存和消息代理。Redis的网络模型是其高性能的关键因素之一&#xff0c;它涉及到多个方面&#xff0c;包括内存管理、事件处理、…

LeetCode 14.最长公共前缀(python版)

需求 编写一个函数来查找字符串数组中的最长公共前缀。 如果不存在公共前缀&#xff0c;返回空字符串 “”。 示例 1&#xff1a; 输入&#xff1a;strs [“flower”,“flow”,“flight”] 输出&#xff1a;“fl” 示例 2&#xff1a; 输入&#xff1a;strs [“dog”,“race…

Python使用pip命令安装外部库-项目内安装外部库-全局安装外部库

一、前言 在进行Python项目开发时需要安装一些外部库来扩展项目功能&#xff0c;因此需要了解pip命令的详细使用。 二、基本语法 1.安装库 pip install 包名 2.安装特定版本 pip install 包名版本号 3.升级库 pip install --upgrade 包名 4.卸载库 pip uninstall 包名 5.查看已…

智能调光芯片 PWM调光 模拟调光36V 48V 60V 72V-H5119SL

智能调光芯片是一种用于控制光照系统的集成电路&#xff0c;其主要功能是根据环境条件和用户需求智能调整光照强度。以下是智能调光芯片的基本工作原理&#xff1a; 传感器输入&#xff1a;智能调光芯片通常集成光感应传感器&#xff0c;用于检测周围环境的光照强度。传感器会…

2023 工业 AR 关键词:纵深和开拓

2023 年&#xff0c;以虚实融合、工业元宇宙为代表的“新数字化”升级在工业制造领域达成共识。 ▲五部委联合印发元宇宙行动计划 通过发展元宇宙赋能新型工业化 而相对过去几年的行业渗透广、落地场景多样的 AR 业务拓展与合作&#xff0c;#纵深和#开拓&#xff0c;成为 2023…

Pandas.DataFrame.idxmin() 最小值索引 详解 含代码 含测试数据集 随Pandas版本持续更新

关于Pandas版本&#xff1a; 本文基于 pandas2.2.0 编写。 关于本文内容更新&#xff1a; 随着pandas的stable版本更迭&#xff0c;本文持续更新&#xff0c;不断完善补充。 传送门&#xff1a; Pandas API参考目录 传送门&#xff1a; Pandas 版本更新及新特性 传送门&…

C#用DateTime.Now静态属性返回日期的星期信息

目录 一、使用的方法 1.Now属性 2.ToString方法 二、示例 使用DateTime结构的Now静态属性&#xff0c;可以方便地获取系统日期信息。调用时间对象的ToString方法&#xff0c;在该方法的参数中添加适当的格式化字符串&#xff0c;将返回日期的星期信息。 一、使用的方法 1…

网络电视盒子哪个好?博主分享超高性价比网络电视盒子推荐

电视盒子是我们使用最多的数码产品&#xff0c;年货节很多朋友在纠结网络电视盒子哪个好&#xff0c;我这次的测评产品就是电视盒子&#xff0c;按照18款电视盒子的深度测评结果整理了网络电视盒子推荐&#xff0c;想知道网络电视盒子哪个好可以看看下面这五款电视盒子。 一&am…

【数学建模】插值与拟合

文章目录 插值插值方法用Python解决插值问题 拟合最小二乘拟合数据拟合的Python实现 适用情况 处理由试验、测量得到的大量数据或一些过于复杂而不便于计算的函数表达式时&#xff0c;构造一个简单函数作为要考察数据或复杂函数的近似 定义 给定一组数据&#xff0c;需要确定满…

ArcEngine添加点要素、线要素、面要素及学习总结

基于C#的ArcEngine二次开发教程&#xff08;13&#xff09;&#xff1a;点、线、面要素的绘制_arcengine onmousedown-CSDN博客 https://www.cnblogs.com/cannel/p/11074343.html ArcEngine绘制点、线、多边形、矩形、圆形、椭圆的代码_arcengine 开发 生成矩形-CSDN博客 https…

keil5 查看stm32 寄存器的值

1 查看芯片内部寄存器的值&#xff0c;首先是在仿真状态下&#xff0c;首先仿真&#xff0c;程序运行。 2 点击菜单栏的 View -> System viewer &#xff0c;右侧便会出现芯片的所有寄存器(如果没有&#xff0c;需要添加)&#xff0c;点击要查看的寄存器&#xff0c;便会出…

【手撕C语言 第八集】函数栈帧的创建与销毁

文章目录 一、什么是函数栈帧&#xff1f;二、函数栈帧能解决什么问题呢&#xff1f;&#xff08;1&#xff09;局部变量是如何创建的&#xff1f;&#xff08;2&#xff09;为什么局部变量不初始化内容是随机的&#xff1f;&#xff08;3&#xff09;函数调用时参数是如何传递…

使用ffmpeg转换索尼老DV拍摄的VOB文件为mp4

一些背景故事 最近对象想用 CCD 拍照录像&#xff0c;家里刚好有一台快 20 年前的索尼 DV DCR-DVD653E&#xff0c;就是电池老化充不进去电了。 翻出来之后还感慨了一下&#xff1a;当年没有网购&#xff0c;价格不透明&#xff1b;有些地方也没有官方店&#xff0c;只有一两家…

Yuliverse:引领区块链游戏新篇章!

数据源&#xff1a;Yuliverse Dashboard 作者&#xff1a;lesleyfootprint.network 什么是 Yuliverse Yuliverse 是一款元宇宙游戏的先锋&#xff0c;是一款主打 Explore to earn 和 Social to earn 的链游。 这是一款能让你边玩边赚钱的免费区块链游戏&#xff0c;得到 LI…

解决docker desktop 登录不上账号的问题

一、背景 点击“Sign in”&#xff0c;一直卡在Verifying credentials...&#xff0c;重试也没用。 二、解决办法 1、macOS下载并安装Proxifier 2、配置Proxifier 配置Proxies 配置rule 其中的Applications填&#xff1a;"Docker.app"; "Docker"; com.…

机器学习之聚类-2D数据类别划分

无监督学习&#xff08;Unsupervised Learning&#xff09; 机器学习的一种方法&#xff0c;没有给定事先标记过的训练示例&#xff0c;自动对输入的数据进行分类或分群。 方式一&#xff1a;站着或坐着 方式二&#xff1a;全身或半身 方式三&#xff1a;蓝眼球或不是蓝眼球 …

解决TortoiseGit软件Git Show log时显示Too many files to display的问题

1 问题描述 有时代码提交修改的文件比较多&#xff0c;当查看log时无法显示出来修改的文件列表&#xff0c;如下所示&#xff1a; 2 解决方法 将LogTooManyItemsThreshold尽可能配置得大一些。 三 参考资料 https://gitlab.com/tortoisegit/tortoisegit/-/issues/3878

使用 Docker 部署 ServerStatus 服务器监控系统

一、ServerStatus 介绍 GitHub&#xff1a;https://github.com/cppla/ServerStatus ServerStatus 是一个酷炫高逼格的云探针、云监控、服务器云监控、多服务器探针~。 特性 使用 Rust 完全重写 Server、Client&#xff0c;单个执行文件部署支持上下线和简单自定义规则告警 (T…

01. eNSP环境以及VRP基本使用

eNSP的基本使用 1. eNSP的桥连接1.1. 具体操作&#xff08;1&#xff09;创建环回适配器&#xff08;2&#xff09;设置虚拟网卡&#xff08;3&#xff09;使用eNSP桥接计算机 2. 华为VRP系统2.1. 实验1&#xff1a;VRP的基本操作2.2. 实验2&#xff1a;文件命令&#xff08;1&…