PAT-B-1030

1030 完美数列(25 分)

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

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

输入格式:

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

输出格式:

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

输入样例:

10 8
2 3 20 4 5 1 6 7 8 9

输出样例:

8
使用迭代法会快得多!递归会Timeout!
int Itera(int* A, int N, int P){
    int i, j, maxLength=0;
    
    for( i=0, j=0; j<N; i++){/*more fast: think of why j < N*/
        for( ; j<N; j++)
            if( A[j] > 1L*A[i]*P )
              break;
        if( (j-i) > maxLength )
          maxLength = j-i;
    }
    
    return maxLength;
}
C 语言实现


原文地址:https://www.cnblogs.com/EasonDongH/p/9530864.html