牛客网_PAT乙级_1020完美数列(25)【vector sort 最后一个测试用例超时】
题目描述
给定一个正整数数列,和正整数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 最后一个测试用例超时】相关推荐
- 牛客网_PAT乙级_1031. 查验身份证(15)【class new一个数组】
心得(new,if短路原理) new[](new的数组版)要求元素对象的类型必须具有默认构造函数(内建类型的"默认构造函数"是什么也不做),否则将不能使用new[]. ???突然发 ...
- 牛客网_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 ...
- 牛客网_PAT乙级_1019. 数字黑洞 (20)
总结 注意!! 想要在函数中结束程序,一定不要用system("pause");,因为这样只是让程序暂停,结果就是运行时间超时,无法通过所有的测试用例. 那么,C++ 程序中什么函 ...
- 牛客网_PAT乙级_1010月饼 (25)
因为黑框框里放不下,(非官网)测试用例用txt导入: 这题有一个陷阱,官网上说给非0数,测试用例却出现了0,0吨的月饼能卖507元,而且这样的月饼要最先卖,因为它的price是inf,卖掉0吨净赚50 ...
- 牛客网_PAT乙级_1029有几个PAT(25)【输入字符串并strlen计算长度】
题目描述 字符串APPAPT中包含了两个单词"PAT",其中第一个PAT是第2位§,第4位(A),第6位(T):第二个PAT是第3位§,第4位(A),第6位(T). 现给定字符串, ...
- 牛客网_PAT乙级_1028到底买不买(20)【用iterator迭代器,对两个vectorchar比较,删除相同元素】
题目描述 小红想买些珠子做一串自己喜欢的珠串.卖珠子的摊主有很多串五颜六色的珠串,但是不肯把任何一串拆散了卖.于是小红要你帮忙判断一下,某串珠子里是否包含了全部自己想要的珠子?如果是,那么告诉她有多少 ...
- 牛客网_PAT乙级_1027在霍格沃茨找零钱(20)
题目描述 如果你是哈利·波特迷,你会知道魔法世界有它自己的货币系统 -- 就如海格告诉哈利的:"十七个银西可(Sickle)兑一个加隆(Galleon),二十九个纳特(Knut)兑一个西可, ...
- 牛客网_PAT乙级_1025插入与归并(25)
题目描述 根据维基百科的定义: 插入排序是迭代算法,逐一获得输入数据,逐步产生有序的输出序列.每步迭代中,算法从输入序列中取出一元素,将之插入有序序列中正确的位置.如此迭代直到全部元素有序. 归并排序 ...
- 牛客网_PAT乙级_1026跟奥巴马一起编程(15)
题目描述 美国总统奥巴马不仅呼吁所有人都学习编程,甚至以身作则编写代码,成为美国历史上首位编写计算机代码的总统.2014年底,为庆祝"计算 机科学教育周"正式启动,奥巴马编写了很简 ...
最新文章
- a*算法matlab代码_导向滤波算法及其matlab代码实现
- R语言ggplot2可视化:ggplot2可视化时间序列数据并在末尾数据点添加数值标签(number label)
- linux:配置jdk环境变量
- python 分布式锁_python分布式锁
- mysql 视图触发器,MySql视图触发器存储过程详解
- led大屏按实际尺寸设计画面_“差评”不断的LED户外大屏,到底缺了什么?
- 【CASS精品教程】南方CASS内业基本作图--野外测记草图法绘制常见地物教程
- 用Python识别验证码
- 在Linux中实现https访问站点
- java保留小数点后几位,不足的用0补
- java处理加密文件---实现RSA算法
- 二分查找时间复杂度分析
- arsc编辑器手机版_APK编辑器中文版,任意修改你手机中的APP名称、logo!
- Gradle下载 Jar 包
- 理解JVM(五):Java内存模型与线程
- 局域网共享文件的方法
- ❤️FFmpeg❤️ MP4格式文件,将MPEG4的编码方式转为H.264
- 在FL Studio中如何制作白噪音的转场效果
- 支付宝公布春节抢红包大数据 金华人全国第五壕
- web页面-JS/DOM/BOM/窗口滚动/修改内容/上传文件