PAT B1030 完美数列 (25分)

题目链接https://pintia.cn/problem-sets/994805260223102976/problems/994805291311284224

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

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

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

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

样例输入
10 8
2 3 20 4 5 1 6 7 8 9

样例输出
8

代码

#include <cstdio>
#include <algorithm>
using namespace std;
const int maxn = 100010;
int n, p, a[maxn];

int main() {
	scanf("%d%d", &n, &p);
	for(int i = 0; i < n; i++)
		scanf("%d", &a[i]);
	sort(a, a + n);
	int ans = 1;
	for(int i = 0; i < n; i++) {
		int j = upper_bound(a + i + 1, a + n, (long long)a[i] * p) - a;
		ans = max(ans, j - i);
	}
	printf("%d\n", ans);
	return 0;
}
发布了288 篇原创文章 · 获赞 12 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/Rhao999/article/details/104748876