您的位置:首页 > 其它

1030. 完美数列(25)-PAT乙级真题

2016-07-22 14:44 274 查看
1030.
完美数列(25)

给定一个正整数数列,和正整数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

分析:一开始运行超时,然后for循环里面加了个break就不超时了。。

后来一直最后一个测试用例过不了。。

改成long
long int p和long long int 的数组就AC了。。。

应该是因为在运算过程中,相乘后会溢出。。。

#include <iostream>
#include <algorithm>
using namespace std;
int cmp(int a, int b) {
return a < b;
}

int main() {
int n;
long long p;
cin >> n >> p;
if (n == 0) {
cout << n;
return 0;
}
long long int *a = new long long int
;
for (int i = 0; i < n; i++)
cin >> a[i];
sort(a, a+n, cmp);
int result = 1;
int temp = 1;
for (int i = 0; i <= n - 2; i++) {
for (int j = i + result; j <= n - 1; j++) {
if (a[j] <= a[i] * p) {
temp = j - i + 1;
if (temp > result) {
result = temp;
}
} else {
break;
}
}
}
cout << result;
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: