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 (≤10 5 ) is the number of integers in the sequence, and p (≤10 9 ) is the parameter. In the second line there are N positive integers, each is no greater than 10 9 .
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
给一个序列和一个参数p,要求找到一个被叫做完美序列的子序列sque,其中sque中的最小值与p的乘积要大于等于sque中的最大值
#include <algorithm>
#include <iostream>
#include <vector>
using namespace std;
int n;
long long m; //由于m*sque[i]可能会超过int,所以将m设为long long型
int maxLength = 0; //完美序列的最大长度
int main()
{
scanf("%d%lld", &n, &m);
vector<int> sque(n);
for (int i = 0; i < n; i++)
{
scanf("%d", &sque[i]);
}
sort(sque.begin(), sque.end());
for (int i = 0; i < n; i++) //从序列小的开始,找到以sque[i]为最小值的最长完美序列
{
//因为sque[i]的最长完美序列为maxLength,其尾元素就是sque[i+maxLength]
//那么sque[i+1]的最长完美序列的尾元素必定大于等于sque[i+maxLength],所以直接在i+maxLength处开始找即可
for (int j = i + maxLength; j < n;j++)
{
if(sque[i]*m>=sque[j])
{
int tempLength = j - i + 1;
if(tempLength>maxLength)
maxLength = tempLength;
}
else //找到最大尾元素了即终止本次查找
break; //此句不加测试点4超时
}
}
printf("%d", maxLength);
}
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
int n, maxLength = 0;
long long m;
int main()
{
scanf("%d%lld", &n, &m);
vector<int> sque(n);
for (int i = 0; i < n;i++)
{
scanf("%d", &sque[i]);
}
sort(sque.begin(), sque.end());
for (int i = 0; i < n;i++)
{
int tempLength = upper_bound(sque.begin(), sque.end(), sque[i] * m) - sque.begin() - i;
if(tempLength>maxLength)
maxLength = tempLength;
}
printf("%d", maxLength);
return 0;
}
本文章使用limfx的vscode插件快速发布