题目描述

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

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

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

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

输入例子:
10 8
2 3 20 4 5 1 6 7 8 9

输出例子:
8

我自己写的测试用例:

测试用例1

输入:
10 4
1 1 1 1 1 1 1 1 1 8
答案:
9

测试用例2

输入:
23 50
1 1 1 1 1 1 1 1 1 8 9 10 12 15 20 22 25 30 40 49 50 51 52
答案:
21

测试用例3

输入:
6 4
1 2 3 4 5 18
答案:
4

代码

此题答案有争议:
以下代码跑上面提到过的所有的测试用例都没问题,但OJ上超时。
我写过一个只有最后一个测试用例不通过的代码,但是那个思路完全不对。
所以现在的问题是:错误思路能通过大多数测试用例,正确思路本地测试能通过,OJ上运行时间超时。

如何修改?
计划将25行的内层循环j从0开始检查,一直到结尾改为j从maxSize开始检查,一直到结尾,节省一部分时间。

代码1:修改前
以下代码所有测试用例运行超时

#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
int myCompare(int a1, int a2)
{return (a1 < a2);
}
int main()
{int num, p;vector<int>arr;cin >> num >> p;int a;for (int i = 0; i < num; i++){cin >> a;arr.push_back(a);}sort(arr.begin(), arr.end(), myCompare);int i, j;int maxSize = 0;for (i = 0; i < num; i++)//控制起点{for (j = 1; j + i < num; j++)//控制终点{if (arr[i] * p >= arr[j + i]){maxSize = (j > maxSize ? j : maxSize);}}}cout << maxSize + 1;system("pause");
}

代码2:修改后
以下代码最后一个测试用例运行超时

#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
int myCompare(int a1, int a2)
{return (a1 < a2);
}
int main()
{int num, p;vector<int>arr;cin >> num >> p;int a;for (int i = 0; i < num; i++){cin >> a;arr.push_back(a);}sort(arr.begin(), arr.end(), myCompare);int i,j;int maxSize=0;for (i = 0; i < num; i++)//控制起点{for (j = maxSize; j + i < num; j++)//控制终点{if (arr[i] * p >= arr[j+i]){maxSize = (j > maxSize ? j : maxSize);}}}cout << maxSize+1;
}

牛客网_PAT乙级_1020完美数列(25)【vector sort 最后一个测试用例超时】相关推荐

  1. 牛客网_PAT乙级_1031. 查验身份证(15)【class new一个数组】

    心得(new,if短路原理) new[](new的数组版)要求元素对象的类型必须具有默认构造函数(内建类型的"默认构造函数"是什么也不做),否则将不能使用new[]. ???突然发 ...

  2. 牛客网_PAT乙级_1015反转链表 (25)【没做出来】

    题目描述 给定一个常数K以及一个单链表L,请编写程序将L中每K个结点反转.例如:给定L为1→2→3→4→5→6,K为3,则输出应该为 3→2→1→6→5→4:如果K为4,则输出应该为4→3→2→1→5 ...

  3. 牛客网_PAT乙级_1019. 数字黑洞 (20)

    总结 注意!! 想要在函数中结束程序,一定不要用system("pause");,因为这样只是让程序暂停,结果就是运行时间超时,无法通过所有的测试用例. 那么,C++ 程序中什么函 ...

  4. 牛客网_PAT乙级_1010月饼 (25)

    因为黑框框里放不下,(非官网)测试用例用txt导入: 这题有一个陷阱,官网上说给非0数,测试用例却出现了0,0吨的月饼能卖507元,而且这样的月饼要最先卖,因为它的price是inf,卖掉0吨净赚50 ...

  5. 牛客网_PAT乙级_1029有几个PAT(25)【输入字符串并strlen计算长度】

    题目描述 字符串APPAPT中包含了两个单词"PAT",其中第一个PAT是第2位§,第4位(A),第6位(T):第二个PAT是第3位§,第4位(A),第6位(T). 现给定字符串, ...

  6. 牛客网_PAT乙级_1028到底买不买(20)【用iterator迭代器,对两个vectorchar比较,删除相同元素】

    题目描述 小红想买些珠子做一串自己喜欢的珠串.卖珠子的摊主有很多串五颜六色的珠串,但是不肯把任何一串拆散了卖.于是小红要你帮忙判断一下,某串珠子里是否包含了全部自己想要的珠子?如果是,那么告诉她有多少 ...

  7. 牛客网_PAT乙级_1027在霍格沃茨找零钱(20)

    题目描述 如果你是哈利·波特迷,你会知道魔法世界有它自己的货币系统 -- 就如海格告诉哈利的:"十七个银西可(Sickle)兑一个加隆(Galleon),二十九个纳特(Knut)兑一个西可, ...

  8. 牛客网_PAT乙级_1025插入与归并(25)

    题目描述 根据维基百科的定义: 插入排序是迭代算法,逐一获得输入数据,逐步产生有序的输出序列.每步迭代中,算法从输入序列中取出一元素,将之插入有序序列中正确的位置.如此迭代直到全部元素有序. 归并排序 ...

  9. 牛客网_PAT乙级_1026跟奥巴马一起编程(15)

    题目描述 美国总统奥巴马不仅呼吁所有人都学习编程,甚至以身作则编写代码,成为美国历史上首位编写计算机代码的总统.2014年底,为庆祝"计算 机科学教育周"正式启动,奥巴马编写了很简 ...

最新文章

  1. a*算法matlab代码_导向滤波算法及其matlab代码实现
  2. R语言ggplot2可视化:ggplot2可视化时间序列数据并在末尾数据点添加数值标签(number label)
  3. linux:配置jdk环境变量
  4. python 分布式锁_python分布式锁
  5. mysql 视图触发器,MySql视图触发器存储过程详解
  6. led大屏按实际尺寸设计画面_“差评”不断的LED户外大屏,到底缺了什么?
  7. 【CASS精品教程】南方CASS内业基本作图--野外测记草图法绘制常见地物教程
  8. 用Python识别验证码
  9. 在Linux中实现https访问站点
  10. java保留小数点后几位,不足的用0补
  11. java处理加密文件---实现RSA算法
  12. 二分查找时间复杂度分析
  13. arsc编辑器手机版_APK编辑器中文版,任意修改你手机中的APP名称、logo!
  14. Gradle下载 Jar 包
  15. 理解JVM(五):Java内存模型与线程
  16. 局域网共享文件的方法
  17. ❤️FFmpeg❤️ MP4格式文件,将MPEG4的编码方式转为H.264
  18. 在FL Studio中如何制作白噪音的转场效果
  19. 支付宝公布春节抢红包大数据 金华人全国第五壕
  20. web页面-JS/DOM/BOM/窗口滚动/修改内容/上传文件

热门文章

  1. Valgrind简单用法
  2. 2022新年重磅技术分享|深入理解Linux操作系统
  3. Spring 和 SpringBoot 比较,解惑区别!
  4. 被认为最具影响力的4种编程语言!
  5. BloomFilter算法概述
  6. 使用 litmus 验证内存重排
  7. 深度解密Go语言之pprof
  8. OS- -内存之页面置换算法
  9. Facebook如何将QUIC应用于数十亿流量传输
  10. Mozilla裁员波及Daala Codec团队