PAT 1030 完美数列(C++实现)

PAT乙级真题 1030 完美数列 C++实现(测试点4超时神坑) 题目 给定一个正整数数列,和正整数 p,设这个数列中的最大值是 M,最小值是 m,如果 M≤mp,则称这个数列是完美数列。 现在给定参数 p 和一些正整数,请你从中选择尽可能多的数构成一个完美数列。 输入格式: 输入第一行给出两个正整数 N 和 p,其中 N(≤10 ^ ​5)是输入的正整数的个数,p(≤10 ^ 9)是给定的参数。第二行给出 N 个正整数,每个数不超过 10 ^ 9。 输出格式... 阅读详情

给定一个正整数数列,和正整数 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

代码长度限制

16 KB

时间限制

200 ms

内存限制

64 MB

【代码实现】得了24分,测试点5失分不知道问题是什么

#define _CRT_SECURE_NO_WARNINGS 1
#include <iostream>
#include <cstring>
using namespace std;


typedef  unsigned long long l;
int isvalid(l, l, l);
int compare(const void*, const void*);

int main()
{
    int n = 0;
    l p = 0;
    cin >> n >> p;
    l* arr = new l[n];
    for (int i = 0; i < n; i++)
    {
        cin >> arr[i];
    }
    qsort(arr, n, sizeof(l), compare);
    l max = -1, min = 0;
    int left, right;
    int flag = 0;
    for (left = 0, right = n - 1; left <= right; left++, right--)
    {
        if (left)
        {
            if (!isvalid(arr[left - 1], arr[right + 1],p))
            {
                if (isvalid(arr[left], arr[right], p))
                {
                    flag = 1;
                    break;
                }
            }
        }
        else
        {
            if (isvalid(arr[left], arr[right], p))
            {
                max = arr[right];
                min = arr[left];
            }
        }
    }
    if (flag)
    {
        if (isvalid(arr[left - 1], arr[right], p) && isvalid(arr[left], arr[right + 1], p))
        {
            int ct1 = 0, ct2 = 0;  //分别以两组为边界,谁符合条件的元素更多
            int l1 = arr[left - 1];
            int r1 = arr[right];
            int l2 = arr[left];
            int r2 = arr[right + 1];
            for (int i = 0; i < n; i++)
            {
                if (arr[i] >= l1 && arr[i] <= r1)
                    ct1++;
                if (arr[i] >= l2 && arr[i] <= r2)
                    ct2++;
            }
            if (ct1 >= ct2)
            {
                min = l1;
                max = r1;
            }
            else
            {
                min = l2;
                max = r2;
            }
        }
        else if (isvalid(arr[left - 1], arr[right], p))
        {
            min = arr[left - 1];
            max = arr[right];
        }
        else if (isvalid(arr[left], arr[right + 1], p))
        {
            min = arr[left];
            max = arr[right + 1];
        }
        else
        {
            min = arr[left];
            max = arr[right];
        }
    }
    int ct = 0;
    if (max!=-1)  //成功找到合适的
    {
        for (int i = 0; i < n; i++)
        {
            if (arr[i] <= max && arr[i] >= min)
                ct++;
        }
    }
    cout << ct << endl;
    delete[] arr;
    return 0;
}

int compare(const void* p1, const void* p2)
{
    l* pl1 = (l*)p1;
    l* pl2 = (l*)p2;
    return (*pl1) - (*pl2);
}

int isvalid(l n1, l n2, l p)
{
    return n2 <= p * n1 ? 1 : 0;
}

PAT A1030 完美数列【c语言/测试点4/测试点5】 无 阅读详情

相关推荐

告别底噪和发热:TPA3255的PCB布局与散热设计保姆级教程(附嘉立创EDA文件)

本文详细解析TPA3255 Class D音频功放的PCB布局与散热设计,提供从电源系统分层架构到热管理系统的全流程优化方案。通过实战案例展示如何消除底噪、降低发热,并附嘉立创EDA文件,助力工程师快速设计高性能音频功放。

weixin_29208077的博客 378

有关数学(数学公式推导)(截取ACwing周赛)

c++

qq_45368909的博客 1248

在Docker中集成GPU监控体系

先上效果图 等文档整理出来再更

tamako0v0的博客 2471

每天一个小题目——完美数

我们称一个正整数n是完美数,如果n的所有因子的平方和f(n)是一个完全平方数。 例如n=10,那么f(n)=1+4+25+100=130,所以10不是一个完美数。 请求出小于n的所有完美数的和。

SmallerNovice的博客 1222

【OpenClaw 故障排查完全指南】

OpenClaw 故障排查指南摘要 本指南针对OpenClaw 2026.2.26版本常见问题提供解决方案,适用于Windows/Linux/macOS平台。 核心问题及修复方案: 飞书插件连接失败:删除冲突插件或重装OpenClaw Ollama认证错误:设置环境变量OLLAMA_API_KEY="ollama-local" 配置警告:可安全忽略的安全扫描提示 端口占用:查找并终止占用18789端口的进程 插件重复加载:清理重复插件目录 快速修复: 提供一键修复PowerShell脚本

weixin_37572294的博客 1万+

rfid标签技术原理

奇怪的是,RFID标签技术原理的深入剖析不仅揭示了其背后的奥秘,也让我们更加全面地认识到这一技术在数字化转型中的重要性和潜力。随着技术的不断进步和应用场景的不断拓展,RFID标签将在更多领域发挥重要作用,为物联网、智能制造等领域的发展注入新的活力。这意味着在一个读写器的覆盖范围内,可以同时读取多个RFID标签的数据,大大提高了数据收集的速度和效率。:RFID标签的“大脑”,负责存储和处理数据。芯片内部集成了存储器、控制逻辑和射频接口等电路,能够接收来自读写器的射频信号,执行相应的数据处理和通信任务。

x3088的博客 2159

507. 完美数

507.完美数 对于一个 正整数,如果它和除了它自身以外的所有正因子之和相等,我们称它为“完美数”。 给定一个 正整数 n, 如果他是完美数,返回 True,否则返回 False 示例: 输入: 28 输出: True 解释: 28 = 1 + 2 + 4 + 7 + 14 注意: 输入的数字 n 不会超过 100,000,000. (1e8) 分析: 最大因数是num/2,向下找正因数累加。...

quekai01的博客 295

【Unity优化篇】| Unity3D场景 常用优化策略,遮挡剔除、层消隐距离技术 和 LOD多层次细节

本篇文章来简单介绍一下 Unity中几种常用3D场景优化策略 方法 对于整个项目来说,本文中出现的方法也只是冰山一角,慢慢积累学习吧! 内容包括遮挡剔除(Occlusion Culling)、层消隐距离技术 和 LOD多层次细节

努力前行,总会成为自己心中的那道光 1万+

pat 乙级 1030 完美数列(C++)

题目 给定一个正整数数列,和正整数 p,设这个数列中的最大值是 M,最小值是 m,如果 M≤mp,则称这个数列是完美数列。 现在给定参数 p 和一些正整数,请你从中选择尽可能多的数构成一个完美数列。 输入格式: 输入第一行给出两个正整数 N 和 p,其中 N(≤10​5)是输入的正整数的个数,p(≤109)是给定的参数。第二行给出 N 个正整数,每个数不超过 109​​ 。 输出格式: 在一行中输出最多可以选择多少个数可以用它们组成一个完美数列。 输入样例: 10 8 2 3 20 4 5 1 6 7 8

魔神之云的博客 404

msf后渗透之获取登入password、远程控制、调用摄像头

在terminal输入load kili creds_all直接获取密码(不一定成功) 使用kiwi_cmd sekurlsa::logonpasswords获取密码

m0_61506558的博客 2964

【002】C++ 语言核心:关键字深度解析与分类指南

auto:自动类型推导bool:布尔类型break:跳出循环或switch语句case:switch语句分支char:字符类型class:定义类const:常量continue:结束当前循环,开始下一次循环default:switch语句默认分支delete:删除对象do:do-while循环double:双精度浮点数类型else:if语句的否定分支enum:枚举类型explicit:显式构造函数export:导出符号extern:声明外部变量或函数。

Lion_Long的博客 1250

PAT 乙级 1030(完美数列 )

PAT 乙级 1030题目要求代码思路 题目要求 给定一个正整数数列,和正整数 p,设这个数列中的最大值是 M,最小值是 m,如果 M≤mp,则称这个数列是完美数列。 现在给定参数 p 和一些正整数,请你从中选择尽可能多的数构成一个完美数列。 输入格式: 输入第一行给出两个正整数 N 和 p,其中 N(≤10510^5105)是输入的正整数的个数,p(≤10910^9109)是给定的参数。第二行给...

qq_42865772的博客 374

【物联网】基于LORA组网的远程环境监测系统设计(ThingsCloud云平台版)_资料编号34

实现一主多从的LORA组网远程通信,主机和两个从机都配备了STM32F103单片机与 LoRa 模块,主机作为中心设备及WIFI网关,负责接收和发送数据到远程物联网平台和手机APP,两个从机则负责采集数据并通过各自的 LoRa组网将数据发送给主机。

嵌入式阿齐Archie 1万+

PAT乙级刷题/1030 完美数列/C++实现

一、题目描述 给定一个正整数数列,和正整数p,设这个数列中的最大值是M,最小值是m,如果M≤mp,则称这个数列是完美数列。 现在给定参数p和一些正整数,请你从中选择尽可能多的数构成一个完美数列。 输入格式: 输入第一行给出两个正整数N和p,其中N(≤105)是输入的正整数的个数,p(≤109)是给定的参数。第二行给出N个正整数,每个数不超过109。 输出格式: 在一行中输出最多可以选择多少个数可以用它们组成一个完美数列。 输入样例: 10 8 2 3 20 4 5...

null1024的博客 232

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

1030 完美数列——C/C++实现

题目 1030 完美数列 (25 point(s)) 给定一个正整数数列,和正整数 p,设这个数列中的最大值是 M,最小值是 m,如果 M≤mp,则称这个数列是完美数列。 现在给定参数 p 和一些正整数,请你从中选择尽可能多的数构成一个完美数列。 输入格式: 输入第一行给出两个正整数 N 和 p,其中 N(≤10​5​​)是输入的正整数的个数,p(≤10​9​​)是给定的参数。第二行给...

吉大秦少游 3132

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

【PAT】1030 完美数列

【PAT】1030 完美数列,upper_bound函数

m0_52031708的博客 148

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

PAT乙级 1030 完美数列

题目: 输入样例: 10 8 2 3 20 4 5 1 6 7 8 9 输出样例: 8 分析: 1.首先这道题不能从假设数列中最多所有的数可以构成完美数列开始,然后发现M>m*p后再进行排除(从大到小)。这样做每次要排除时因该排除哪个数?就算第一次排除对了,还是会对之后的判断产生影响,即后面的判断是不准的,最后结果肯定有对有错。 2.最好还是从小到大判断是否能构成完美数列,先用vect...

chongchujianghu3的博客 188

1030 完美数列

写在前面 思路1: 数组法,数组下标存储数列值 当前值作为最大值(不建议) 运行超时(cuo)、段错误 思路2: 容器法,遍历2层循环 当前值作为最小值(可取) 运行超时(不必要循环)、答案错误(整型,大数(乘积结果)超出范围) 测试用例 9 8 2 3 4 5 1 6 7 8 9 // 测试点3 5 1 1 1 1 1 1 5 1 1 2 3 4 5 ac代码 ...

kngines 294

PAT:B1030 完美数列(25 分)

PAT:B1030 完美数列(25 分) 给定一个正整数数列,和正整数 p,设这个数列中的最大值是 M,最小值是 m,如果 M≤mp,则称这个数列是完美数列。 现在给定参数 p 和一些正整数,请你从中选择尽可能多的数构成一个完美数列。 输入格式: 输入第一行给出两个正整数 N 和 p,其中 N(≤10​5​​)是输入的正整数的个数,p(≤10​9​​)是给定的参数。第二行给出 N 个正整数...

Ecloss 264

2020-01-12

PAT 1030 完美数列c++ 函数体只用了7行 #include<iostream> #include<algorithm> using namespace std; int main() { long long int n,p,i; cin>>n>>p; long long int *arr=new long long int[n]; f...

qq_45564275的博客 187

PAT乙级1030 完美数列(C语言c++混用)

标题:PAT乙级1030 完美数列(C语言) 题目 给定一个正整数数列,和正整数 p,设这个数列中的最大值是 M,最小值是 m,如果 M≤mp,则称这个数列是完美数列。 现在给定参数 p 和一些正整数,请你从中选择尽可能多的数构成一个完美数列。 输入格式: 输入第一行给出两个正整数 N 和 p,其中 N(≤10​5)是输入的正整数的个数,p(≤10​9​​ )是给定的参数。第二行给出 N 个正整数,每个数不超过 10^​9 ​​ 。 输出格式: 在一行中输出最多可以选择多少个数可以用它们组成一个完美数列。

qq_51517771的博客 196

PAT 乙级 1030 完美数列 (25分)

我的个人网站Cheese的个人主页 博客来源PAT 乙级 1030 完美数列-Cheese的个人博客 欢迎交换友链 :-) #include<bits/stdc++.h> usingnamespacestd; intmain(){ longlonginta[100001]; intn; longlongintp; cin>>n>>p; for(inti=0;i<n;i...

起司Cheese的博客 122

20考研率辉计算机复试(二分法)

PAT (Basic Level) Practice (中文) 1030 完美数列 (25分) C++ #include<iostream> #include<algorithm> using namespace std; int bSearch(int L,int R,long long key,long long arr[]) { while(L<=R) { ...

weixin_46144186的博客 209

PAT (Basic Level) Practice 1030 完美数列

PAT刷题记录分享 - PAT1030

KaiYingLi的博客 355

PAT菜鸡进化史_乙级_1030

PAT菜鸡进化史_乙级_1030 给定一个正整数数列,和正整数 p,设这个数列中的最大值是 M,最小值是 m,如果 M≤mp,则称这个数列是完美数列。 现在给定参数 p 和一些正整数,请你从中选择尽可能多的数构成一个完美数列。 输入格式: 输入第一行给出两个正整数 N 和 p,其中 N(≤10​5​​)是输入的正整数的个数,p(≤10​9​​)是给定的参数。第二行给出 N 个正整数,每个数不超过 ...

Raccoonnn的博客 183

PAT Basic1030 完美数列

链接:PAT Basic1030 给定一个正整数数列,和正整数 p,设这个数列中的最大值是 M,最小值是 m,如果 M≤mp,则称这个数列是完美数列。 现在给定参数 p 和一些正整数,请你从中选择尽可能多的数构成一个完美数列。 输入格式: 输入第一行给出两个正整数 N 和 p,其中 N(≤105​​)是输入的正整数的个数,p(≤109​​)是给定的参数。第二行给出 N 个正整数,每个数不...

Plus Ultra! 259
上一篇: PAT 1024 科学计数法(C++实现)
下一篇: 1034 有理数四则运算
Lucid_Winter
博客等级 码龄4年 17粉丝 60原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值