1. 程式人生 > >【B1030】完美數列

【B1030】完美數列

題目描述:

給定一個正整數數列,和正整數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

提交程式碼:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 19 20 21 22 23 24 25 26
#include <stdio.h>
#include <algorithm>
using namespace std;

int main(void) { 
  int n,p;
  scanf("%d %d",&n,&p);
  int arr[n],i;
  
  for(i=0;i<n;i++){
      scanf("%d",&arr[i]);
  }
  
  sort(arr,arr+n);
  
  int count=1,j=0,k=0;
  while(j<n&&k<n){
      while
(k<n&&arr[k]<=(long long)arr[j]*p){ //看書的,不明白為什麼這裡也要加個條件k<n count=max(count,k-j+1); k++; } j++; } printf("%d",count); return 0; }