1030. 完美數列(25)(C++)
阿新 • • 發佈:2019-02-12
給定一個正整數數列,和正整數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這道題不知道為什麼總是讓我想起最小子列和那個題,可惜還是不能把演算法優化到N(⊙o⊙)…
#include <iostream> #include<algorithm> #include<vector> using namespace std; int main() { int n; int p; cin>>n>>p; std::vector<long> v; int i=0,num=1; for(i=0;i<n;i++){ int x; cin>>x; v.push_back(x); } sort(v.begin(), v.end()); for(i=0;i<n-1;i++){ for(int j=i+num;j<n;j++){ if(v[j]>v[i]*p) break; num++; } } cout<<num; }