PTA跳转:原题链接
题目大意:输入数组长度N和参数p,并对数组a[N]元素逐个赋值。
如果满足M≤m*p,则称这样的数列为完美数列。其中,M和m分别为这个数列的最大值和最小值。
题目要求是从原数列中找出一个子数列能够满足完美数列的条件,输出这个子数列的长度。
#include <iostream>
#include <algorithm>
using namespace std;
int main() {
int N;
long long p;
cin >> N >> p; //N为数组长度,p为参数
int a[N];
for (int i = 0; i < N; i++)
cin >> a[i];
sort(a, a + N); //递增
int result = 0, temp = 0; //temp为第一个指针确定的情况下,满足构成完美数列的数字个数
for (int i = 0; i < N; i++)
{
//result一直在增大,当第一个指针后移时,第二个指针在第一个指针之后的第result个开始即可
for (int j = i + result; j < N; j++)
{
if (a[j] <= a[i] * p)
{
temp = j - i + 1;
if (temp > result) //result一直在增大
result = temp;
}
else
{
break; //跳出内层循环,第一个指针后移
}
}
}
cout << result;
return 0;
}
氷鸢鸢鸢
2020.7.11