PAT Advanced 1085 Perfect Sequence (25 )
题目描述
Input Specification:
Output Specification:
Sample Input:
Sample Output:
解题思路
有最小值和最大值当然会想到将数组进行排序啊,然后利用two pointer的思想,需要注意以下。
long long temp = x*y;
long long temp = x;
temp *= y;
其中,第一种写法还是会产生溢出,需要改成第二种写法。
Code
- AC代码
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
vector<int> v;
int main() {
//freopen("in.txt", "r", stdin);
ios::sync_with_stdio(false);
int N, p;
cin >> N >> p;
v.resize(N);
for(int i = 0; i<N; i++) {
cin >> v[i];
}
sort(v.begin(), v.end());
int M = 0, res = -1;
for(int m = 0; m<N && N-m>res; m++) {
ll temp = v[m];
temp *= p;
while(M < N && v[M] <= temp) M++;
res = max(res, M-m);
}
cout << res << '\n';
return 0;
}