A1085. Perfect Sequence (25)
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
1 #include <stdio.h> 2 #include <stdlib.h> 3 #include <algorithm> 4 #include <string.h> 5 using namespace std; 6 7 const int maxn =100010; 8 int n,p,a[maxn]; 9 10 11 int main(int argc, char* argv[]) 12 { 13 scanf("%d%d",&n,&p); 14 for(int i=0;i<n;i++) 15 { 16 scanf("%d",&a[i]); 17 } 18 sort(a,a+n); 19 int ans=1; 20 for(int i=0;i<n;i++) 21 { 22 int j=upper_bound(a+i+1,a+n,(long long )a[i]*p)-a; 23 ans=max(ans,j-i); 24 } 25 printf("%d\n",ans); 26 system("pause"); 27 return 0; 28 }