PAT Basic 1030 完美数列 (25 分)
Posted littlepage
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PAT Basic 1030 完美数列 (25 分)相关的知识,希望对你有一定的参考价值。
给定一个正整数数列,和正整数 p,设这个数列中的最大值是 M,最小值是 m,如果 M≤mp,则称这个数列是完美数列。
现在给定参数 p 和一些正整数,请你从中选择尽可能多的数构成一个完美数列。
输入格式:
输入第一行给出两个正整数 N 和 p,其中 N(≤)是输入的正整数的个数,p(≤)是给定的参数。第二行给出 N 个正整数,每个数不超过 1。
输出格式:
在一行中输出最多可以选择多少个数可以用它们组成一个完美数列。
输入样例:
10 8
2 3 20 4 5 1 6 7 8 9
输出样例:
8
#include <iostream> #include <algorithm> using namespace std; int main() int N,p; cin>>N>>p; long long a[N]; for(int i=0;i<N;i++) cin>>a[i]; sort(a,a+N); int res=0; for(int i=0;i<N;i++) for(int j=i+res;j<N;j++) if(a[j]<=a[i]*p) res++; else break; cout<<res; system("pause");
1个超时点分析:
1.你如果没有用2个循环,那么概念有错
测试用例:
10 8 1 2 3 4 5 6 7 8 9 100
2.一个超时,可能是你的没有加else break,这个else break意味深长,让你的复杂度变为O(1)
测试用例:取10^5个数让你慢慢遍历
3.没有使用long long,10^9为10位数,并非9位,int的范围为2后面8个数,可能大小超出
测试用例:中间放一个3(8个0),存在这样的数会溢出
以上是关于PAT Basic 1030 完美数列 (25 分)的主要内容,如果未能解决你的问题,请参考以下文章