1030. 完美数列(25)::KMP
给定一个正整数数列,和正整数p,设这个数列中的最大值是M,最小值是m,如果M <= m * p,则称这个数列是完美数列。
现在给定参数p和一些正整数,请你从中选择尽可能多的数构成一个完美数列。
输入格式:
输入第一行给出两个正整数N和p,其中N(<= 105)是输入的正整数的个数,p(<= 109)是给定的参数。第二行给出N个正整数,每个数不超过109。
输出格式:
在一行中输出最多可以选择多少个数可以用它们组成一个完美数列。
输入样例:10 8 2 3 20 4 5 1 6 7 8 9输出样例:
8#include <iostream> #include <vector> #include<algorithm> using namespace std; int main() { double N, p; vector<double> sequence; cin>>N>>p; double i; for (i = 0; i < N; i++) { double temp; scanf("%lf", &temp); sequence.push_back(temp); } sort(sequence.begin(), sequence.end()); double x; double minLimit; double maxCount = 0; for (x=0; x < N; x++) { // 剪枝, 剪长度 if (N - x <= maxCount) { break; } minLimit = sequence[x] * p; for (i = x + maxCount; i < N ; i++) { if (sequence[i] <= minLimit) { double result = i - x + 1; if (result > maxCount) { maxCount = result; } }else { break; } } } printf("%.lf", maxCount); return 0; }