【1085 25 双指针】 Perfect Sequence
传送门
题意
给定\(n\)个数\(a_{i}\)和一个\(p\),从中选出尽可能多的数使得满足\(max\leq p\times min\),输出数的个数
数据范围
\(n\leq 10^{5}\)
\(a_{i},p\leq 10^{9}\)
题解
- 最后一组数据爆
int,用long long - 排序后双指针即可
Code
#include<bits/stdc++.h>
using namespace std;
#define ll long long
int main(){
ios::sync_with_stdio(0); cin.tie(0);
int n; ll p; cin>>n>>p;
vector<ll>a(n);
for(int i=0;i<n;i++) cin>>a[i];
sort(a.begin(),a.end());
int i=0,j=0,ans=0;
while(i<n && j<n){
if(a[i]*p>=a[j]) ans=max(j-i+1,ans),j++;
else while(i<j && a[i]*p<a[j]) i++;
}
cout<<ans<<endl;
}

浙公网安备 33010602011771号