标签:
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通过二分查找获得,时间复杂度是O(NLogN)
LONG LONG这个地方又天真了....
C#include <bits/stdc++.h> #define LL long long using namespace std; LL n, p; vector<LL> arr; bool cmp(const LL &a, const LL &b){ return a < b; } int main(){ LL res = 1; scanf("%lld%lld", &n, &p); LL tmp; for(int i = 0; i < n; ++i){ scanf("%lld", &tmp); arr.push_back(tmp); } sort(arr.begin(), arr.end(), cmp); for(int i = 0; i < n; ++i){ LL pos = upper_bound(arr.begin(), arr.end(), arr[i]*p) - arr.begin(); if(pos != -1){ res = max(pos-i, res); } else{ res = max(n-i, res); break; } } printf("%lld\n", res); return 0; }
PAT-ADVANCED-1085-Perfect Sequence
标签:
原文地址:http://www.cnblogs.com/capouis/p/4793282.html