测试点4:主要卡时间,找最长数列时注意剪枝。
设当前最长数列的长度为max,下次寻找最长数列 j 从 i + max 开始寻找。
测试点5:p需要设置为long long型
正确代码:
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
int main() {
int n, max = 0;
long long p;
scanf("%d %lld", &n, &p);
vector<int> v(n);
for(int i = 0; i < n; i++)
scanf("%d", &v[i]);
sort(v.begin(), v.end());
for(int i = 0; i < n; i++) {
int index = -1;
for(int j = i + max; j < n; j++) {
if(v[j] <= v[i] * p) index = j;
if(v[j] > v[i] * p) break;
}
if(index != -1 && index - i + 1 > max) max = index - i + 1;
}
printf("%d", max);
return 0;
}