1085. Perfect Sequence (25)

来源:互联网 发布:ubuntu嵌入式工控机 编辑:程序博客网 时间:2024/05/16 12:20

1085. Perfect Sequence (25)

 

时间限制
300 ms
内存限制
65536 kB
代码长度限制
16000 B
判题程序
Standard
作者
CAO, Peng

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 82 3 20 4 5 1 6 7 8 9
Sample Output:
8

 

 

#include <stdio.h>#include <stdlib.h>#define MAX 100010int cmp(const void *a, const void *b){return *(int*)a - *(int*)b;}long long a[MAX];int main(){long long  N, p,rhs;int i,length,start,end,mid;//freopen("d:\\input.txt", "r", stdin);scanf("%lld%lld", &N, &p);for (i = 0; i < N; i++){ scanf("%lld", &a[i]);}qsort(a, N, sizeof(a[0]), cmp);length = 0;for (i = 0; i < N; i++){start = i;end = N - 1;rhs = a[start] * p;while (start <= end){mid = (start + end) / 2;if (a[mid] <= rhs){start = mid+1;length = mid - i + 1 > length ? mid - i + 1 : length;}else{end = mid - 1;}}}printf("%d\n", length);return 0;}


 

 

 

0 0