PAT Basic 1030 完美数列 (25 分)

Posted littlepage

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PAT Basic 1030 完美数列 (25 分)相关的知识,希望对你有一定的参考价值。

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

现在给定参数 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 分)的主要内容,如果未能解决你的问题,请参考以下文章

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

PAT二分查找---1030 完美数列 (25分)

PAT Basic 1030

1030 完美数列 (25分)

PAT乙级1030

PTA乙级 (*1030 完美数列 (25分))