zoukankan      html  css  js  c++  java
  • 完美数列【置顶】

    链接:http://www.nowcoder.com/questionTerminal/5bed191944ce4eaa93f4bae50abc90df

    题目描述

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



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

    输入描述:

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

    不超过109。



    输出描述:

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

    输入例子:

    10 8

    2 3 20 4 5 1 6 7 8 9

    输出例子:

    8

    思路:题意很简单,但是真要考虑效率的话还需要好好想想办法。AC代码是看了别人的,想法很好,认真学习!
     1 AC代码:
     2 #include "iostream"
     3 #include <cstdio>
     4 #include <string.h>
     5 #include <string>
     6 #include <cmath>
     7 #include <algorithm>
     8 using namespace std;
     9  
    10 const int MAXN = 100005;
    11 int num[MAXN];
    12  
    13  
    14 int main()
    15 {
    16     int n, p, i, j;
    17     scanf("%d%d", &n, &p);
    18     for(i=1; i<=n; ++i)
    19     {
    20         scanf("%d", &num[i]);
    21     }
    22     sort(num+1, num+n+1);
    23     int len=0, flag=0;
    24     for(int i=1; i<=n; ++i)
    25     {
    26         for(int j=i+len; j<=n; ++j)
    27         {
    28             if(num[j] > num[i]*p)
    29             {
    30                 break;  
    31             }
    32             if(j-i+1 > len)
    33             {
    34                 len = j-i+1;   
    35             }
    36         }
    37     }
    38     cout <<len <<endl;
    39     return 0;
    40 }
     1 TLE代码:
     2 #include "iostream"
     3 #include <iomanip>
     4 #include <string.h>
     5 #include <string>
     6 #include <vector>
     7 #include <cmath>
     8 #include <cctype>
     9 #include <algorithm>
    10 using namespace std;
    11 
    12 const int MAXN = 100005;
    13 int num[MAXN];
    14 
    15 int main()
    16 {
    17     int n, p, i, j;
    18     //cin >>n >>p;
    19         scanf("%d%d", &n, &p);
    20     for(i=1; i<=n; ++i)
    21     {
    22         //cin >>num[i];
    23         scanf("%d", &num[i]);
    24     }
    25     sort(num+1, num+n+1);
    26     int len=0, flag=0;
    27     for(int i=n; i>=1; --i)
    28     {
    29         for(int j=1; j<=n-i+1; ++j)
    30         {
    31             if(num[j+i-1] <= p*num[j])
    32             {
    33                 len = i;
    34                 flag = 1;
    35                 break;
    36             }
    37         }
    38         if(flag == 1)
    39         {
    40             break;
    41         }
    42     }
    43     cout <<len <<endl;
    44     return 0;
    45 }
  • 相关阅读:
    HSSFworkbook,XSSFworkbook,SXSSFworkbook区别总结
    var、let、const的区别
    寻找数组中的质数方法
    lintcode刷题笔记(二)
    CUDA11.2环境上MXNet源码和pytorch源码编译
    protobuf的使用(python)
    Hadoop集群安装-CDH5(5台服务器集群)
    Hadoop 2.6.0 HA高可用集群配置详解(一)
    Hadoop系列之(二):Hadoop集群部署
    Hadoop系列之(一):Hadoop单机部署
  • 原文地址:https://www.cnblogs.com/mtc-dyc/p/4626262.html
Copyright © 2011-2022 走看看