1085. Perfect Sequence (25)

来源:互联网 发布:大非农数据是什么意思 编辑:程序博客网 时间:2024/06/10 15:35

1.先对输入的数据进行排序

2.开始遍历所有情况,其中i从0开始遍历,求得j,使得num[j]<=num[i]*p,用二分法去查找j,把满足情况的都个数记录并取最大值

3.不用二分法的话,第5个测试点会超时

4.使用long long存储数据,后续的比较中,因为p<=10^9,num的最大值可以是10^9,超过32位int型,需要使用long long,才能通过最后一个测试点



AC代码如下:

//#include<string>//#include <iomanip>//#include<stack>//#include<unordered_set>//#include <sstream>//#include "func.h"//#include <list>#include<unordered_map>#include<set>#include<queue>#include<map>#include<vector>#include <algorithm>#include<stdio.h>#include<iostream>#include<string>#include<memory.h>#include<limits.h>using namespace std;/*7 101 10 11 12 13 14 1510 82 3 20 4 5 1 6 7 8 92 12 310 02 3 20 4 5 1 6 7 8 9*/int main(void){int n, p;cin >> n >> p;vector<long long> num(n);for (int i = 0; i < n; i++){scanf("%d", &num[i]);}int maxSize = 0;sort(num.begin(), num.end());for (int i = 0; i < n; i++){//从i=0开始遍历long long tmp = num[i] * p;int l = i;int r = n - 1;while (l <= r){//采用二分法查找int mid = (l + r) / 2;if (num[mid] <= tmp){l = mid + 1;maxSize = max(maxSize, mid + 1 - i);//满足情况的数值都进行比较}else{r = mid - 1;}}}cout << maxSize << endl;return 0;}


0 0