码迷,mamicode.com
首页 > 其他好文 > 详细

PAT-ADVANCED-1085-Perfect Sequence

时间:2015-09-08 23:29:21      阅读:306      评论:0      收藏:0      [点我收藏+]

标签:

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;
}
CAPOUIS‘CODE

 

PAT-ADVANCED-1085-Perfect Sequence

标签:

原文地址:http://www.cnblogs.com/capouis/p/4793282.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!