博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
PAT Basic 1030
阅读量:4677 次
发布时间:2019-06-09

本文共 1121 字,大约阅读时间需要 3 分钟。

1030 完美数列

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

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

输入格式:

输入第一行给出两个正整数N和p,其中N(<= 10^5^)是输入的正整数的个数,p(<= 10^9^)是给定的参数。第二行给出N个正整数,每个数不超过10^9^。

输出格式:

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

输入样例:

10 82 3 20 4 5 1 6 7 8 9

输出样例:

8   题解:这道题目看起来不难,但是N和P的数据量较大,导致需要使用long long int 进行计算,并且需要担心超时的问题。不过还好这道题给的 时间限制相对还是比较宽松的,只需要在暴力的基础上稍作修改就能跑过所有测试点。   暴力的话,自然就是先排序,然后写一个双重嵌套循环,然后找到符合条件的最大值即可,在此基础上,我们发现是要寻找最大值,那么每一次 我们只有在满足之前的最大值时,才进行这一次循环,即可减少时间复杂度,详见代码。 代码如下:
1 #include
2 #include
3 using namespace std; 4 5 int main() 6 { 7 long long int n, p, a[1000001]; 8 int result = 0; 9 scanf("%lld %lld", &n, &p);10 for( int i = 0; i < n; i++) scanf("%lld",&a[i]);11 sort(a,a+n); 12 for( int i = 0; i < n; i++){13 for( int j = i + result; j < n; j++){14 if( a[j] > a[i]*p)15 break;16 if( j - i + 1 > result)17 result = j - i + 1;18 }19 }20 printf("%d",result);21 return 0;22 }

 

 

转载于:https://www.cnblogs.com/yxp400/p/9457608.html

你可能感兴趣的文章
Linux下Tomcat重新启动
查看>>
HTML Table to Json
查看>>
Theano 学习笔记(一)
查看>>
1.7 节点进行排序显示
查看>>
web最佳实践
查看>>
spring 集成shiro 之 自定义过滤器
查看>>
验证密码不允许有连续三位重复的正则表达式
查看>>
python 中对list去重
查看>>
Mono Libgdiplus库
查看>>
js模糊查询案例
查看>>
c语言基础知识要点
查看>>
Android模拟器无法上网访问网络失败解决办法
查看>>
node启动时, listen EADDRINUSE 报错;
查看>>
vue学习链接
查看>>
Systemd 初始化进程
查看>>
【C#学习笔记】文本复制到粘贴板
查看>>
Windows store 验证你的 URL http:// 和 https:// ms-appx:/// ms-appdata:///local
查看>>
python全栈开发_day7_字符编码,以及文件的基本读取
查看>>
js 验证码 倒计时60秒
查看>>
C#基础
查看>>