算法点: 滑动窗口算法
测试点1 需要注意的是溢出问题--> p是很大的数
在下面做乘法时会溢出
#include <bits/stdc++.h>
using namespace std;
int main(){
long long n,p;
cin >> n >> p;
long long a[n];
for(long long i=0;i<n;i++){
cin >> a[i];
}
sort(a,a+n);
long long left = 0, right = 0, len = 0;
while(right < n){
right++;
while(a[right] > p * a[left]){ //乘法计算会有溢出风险
left++;
}
len = max(right - left + 1,len);
}
cout << len;
return 0;
}
该代码示例展示了如何使用滑动窗口算法处理可能引发溢出的乘法操作。程序首先对数组进行排序,然后逐步移动右边界,当窗口内乘积超过给定值p时,左边界向前移动。在此过程中,记录最大窗口大小以找到满足条件的最长子序列。
451

被折叠的 条评论
为什么被折叠?



