1030 完美數列 (25 分)
給定乙個正整數數列,和正整數 p,設這個數列中的最大值是 m,最小值是 m,如果 m≤mp,則稱這個數列是完美數列。
現在給定引數 p 和一些正整數,請你從中選擇盡可能多的數構成乙個完美數列。
輸入第一行給出兩個正整數 n 和 p,其中 n(≤105)是輸入的正整數的個數,p(≤109)是給定的引數。第二行給出 n 個正整數,每個數不超過 109。
在一行中輸出最多可以選擇多少個數可以用它們組成乙個完美數列。
10 8
2 3 20 4 5 1 6 7 8 9
8
所有完美數列應該都是在陣列的遞增序列上的連續若干個數,所以應該先對陣列排序,然後再尋找最大的完美數列。
codes
暴力版:
1 #include2 #include3using
namespace
std;
4const
int maxn = 100010;5
6int
main()17}
18 cout<19return0;
20 }
二分法:
1 #include2 #include3using
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 #include3using
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...