Given a sequence of positive integers and another positive integer p. The sequence is said to be a perfect sequence if M≤m×p where M and m are the maximum and minimum numbers in the sequence, respectively.
Now given a sequence and a parameter p, you are supposed to find from the sequence as many numbers as possible to form a perfect subsequence.
Input Specification:
Each input file contains one test case. For each case, the first line contains two positive integers N and p, where N (≤105) is the number of integers in the sequence, and p (≤109) is the parameter. In the second line there are N positive integers, each is no greater than 109.
Output Specification:
For each test case, print in one line the maximum number of integers that can be chosen to form a perfect subsequence.
Sample Input:
10 8
2 3 20 4 5 1 6 7 8 9
Sample Output:
8
题目大意:在一串数字串中找到一串最大的能满足M<=m*p;
贪心思想,先排序,再挨个遍历,假设遍历在第i个的时候,满足长度result,那么遍历第i+1个的时候,只要验证比第i+1多result位的数是否满足<=v[i+1]*p,若满足则更新result,继续验证。
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main(){
int n, ans = 1;
long long int p;
scanf("%d %lld", &n, &p);
vector<long long int>seq(n);
for(int i = 0; i < seq.size(); ++ i)
scanf("%lld", &seq[i]);
sort(seq.begin(), seq.end());
for(int i = 0; i + ans < n; ++ i){
long long int temp = seq[i] * p;
while(i + ans < n && temp >= seq[i + ans]) ++ ans;
}
printf("%d", ans);
}