• PTA(Basic Level)1030.完美数列


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

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

    输入格式:

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

    输出格式:

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

    输入样例:
    10 8
    2 3 20 4 5 1 6 7 8 9
    
    输出样例:
    8
    
    思路
    • 比较朴素的想法是:二重循环枚举数列(排序后),注意优化就不会TLE
    • 还有注意运算范围显然超过了int的上限,所以要使用long long
    代码
    #include<bits/stdc++.h>
    using namespace std;
    int a[100100];
    int main()
    {
    	int N;
    	long long p;
    	scanf("%d%ld", &N, &p);
    	for(int i=0;i<N;i++)
    		scanf("%d", &a[i]);
    	sort(a, a+N);
    
    	int ans = 0;
    	for(int i=0;i<N;i++)
        {
            for(int j=i+ans;j<N;j++)   //这里j从i+ans开始找是一个很重要的优化,因为数组是有序的,我们这么找只要找让答案最长的数列就好了
            {
                if(a[j] <= a[i] * p)
                    ans = max(ans, j-i+1);
                else break;
            }
        }
        printf("%d
    ", ans);
    	return 0;
    }
    
    
    引用

    https://pintia.cn/problem-sets/994805260223102976/problems/994805291311284224

  • 相关阅读:
    237. 删除链表中的节点
    牛客网-第一场-J-Fraction Comparision
    1. 两数之和
    CCF-201903-1大中小
    学习Python
    Convert Sorted Array to Binary Search Tree
    3-1
    Merge Sorted Array
    Climbing Stairs
    Add Binary
  • 原文地址:https://www.cnblogs.com/MartinLwx/p/11625474.html
Copyright © 2020-2023  润新知