演算法筆記 B1030 完美數列(三種方法)

2022-09-08 19:15:12 字數 1316 閱讀 8830

1030 完美數列 (25 分)

給定乙個正整數數列,和正整數 p,設這個數列中的最大值是 m,最小值是 m,如果 m≤mp,則稱這個數列是完美數列。

現在給定引數 p 和一些正整數,請你從中選擇盡可能多的數構成乙個完美數列。

輸入第一行給出兩個正整數 n 和 p,其中 n(≤10​5​​)是輸入的正整數的個數,p(≤10​9​​)是給定的引數。第二行給出 n 個正整數,每個數不超過 10​9​​。

在一行中輸出最多可以選擇多少個數可以用它們組成乙個完美數列。

10 8

2 3 20 4 5 1 6 7 8 9

8

所有完美數列應該都是在陣列的遞增序列上的連續若干個數,所以應該先對陣列排序,然後再尋找最大的完美數列。

codes

暴力版:

1 #include2 #include3

using

namespace

std;

4const

int maxn = 100010;5

6int

main()17}

18 cout<19return0;

20 }

二分法:

1 #include2 #include3

using

namespace

std;

4const

int maxn = 100010;5

long

long

n,p,a[maxn];

6int binarysearch(int i, long

long

x)14

return

l;15}16

intmain()

21 sort(a, a +n);

22int ans = 1;23

for(int i = 0; i < n; i++)

27 cout<28return0;

29 }

雙指標:

1 #include2 #include3

using

namespace

std;

4const

int maxn = 100010;5

long

long

n,p,a[maxn];67

intmain()

18 i++;19}

20 cout<21return0;

22 }

PAT乙級B1030 完美數列 (25 分)

給定乙個正整數數列,和正整數 p,設這個數列中的最大值是 m,最小值是 m,如果 m mp,則稱這個數列是完美數列。現在給定引數 p 和一些正整數,請你從中選擇盡可能多的數構成乙個完美數列。輸入第一行給出兩個正整數 n 和 p,其中 n 10 5 是輸入的正整數的個數,p 10 9 是給定的引數。第...

B1030 完美數列 25 分 (C語言思路)

給定乙個正整數數列,和正整數 p,設這個數列中的最大值是 m,最小值是 m,如果 m mp,則稱這個數列是完美數列。現在給定引數 p 和一些正整數,請你從中選擇盡可能多的數構成乙個完美數列。輸入格式 輸入第一行給出兩個正整數 n 和 p,其中 n 10 5 是輸入的正整數的個數,p 10 9 是給定...

演算法筆記學習之三種基本排序

基本排序 氣泡排序,選擇排序,插入排序。高等排序 快速排序,歸併排序,希爾排序,堆排序。這是我個人的理解,後三種排序是基於前三種排序的基礎上進行完全完善的。時間複雜度 o n 2 空間複雜度 o 1 舉例 3 4 1 5 2 按照要求把它們從小到大的順序排列。第一趟 3 4 1 5 2 a 0 與a...