• 牛客网PAT练兵场-完美数列


    题目地址:https://www.nowcoder.com/pat/6/problem/4056

    题解:先将a数组进行排序,第一次按题意M<=n*p;n=a[0]时,M最大为J(如下图),然后n从a[0]开始,那么M是从J开始遍历,就可以算出每一次的最大长度。当J到达a数组尾部,时遍历结束。可以算出完美数列最大长度

     1 /**
     2 * Copyright(c)
     3 * All rights reserved.
     4 * Author : YCute
     5 * Date : 2019-11-18-21.21.21
     6 * Description : 排序后拿到最多的数
     7 */
     8 #include<iostream>
     9 #include<cstdio>
    10 #include<cmath>
    11 #include<cstring>
    12 #include<algorithm>
    13 using namespace std;
    14 int main(){
    15     int n,p;
    16     int a[100005];
    17     scanf("%d %d",&n,&p);
    18     for(int i=0;i<n;i++){
    19         scanf("%d",&a[i]);
    20     }
    21     sort(a,a+n);
    22     long long temp=a[0]*p;
    23     int i;
    24     for(i=0;i<n;){
    25         if(a[i]<=temp) i++;
    26         else break;
    27     }
    28 //获取第一次的长度
    29     int MAX=i;
    30     int j=i;
    31 //一次遍历,拿到最大的长度;
    32     for(int i=1;i<n;i++){
    33         temp=a[i]*p;
    34         //cout<<temp<<endl;
    35         while(a[j]<=temp&&j<n){
    36             j++;
    37         }
    38         //cout<<j-i<<endl;
    39         MAX=MAX>(j-i)?MAX:(j-i);//本次temp长度是否最大
    40         if(j==n)break;//到达了数组尾部,直接结束
    41     }
    42     printf("%d
    ",MAX);
    43     return 0;
    44 }
  • 相关阅读:
    keepass
    gpg
    Wireshark实践
    ssh
    namp
    第十二周
    第十一周
    第十周总结
    第九周学习总结
    编程语言
  • 原文地址:https://www.cnblogs.com/cutelife/p/11892016.html
Copyright © 2020-2023  润新知