一开始没搞懂题意,走了很多弯路。题目中说最小值是m,我以为最小值m就是固定了,就是a[0],忽略了题目中说的选择尽可能多的事指的是动态的选择。
因为将数组升序排列了,所以在将每个数作为最小值时,比如a[2],它可以从a[1]停住的那个位置开始,因为a[1]*p>=a[i],a[2]*p也一定满足,就可以按照这个继续向下走,不用走之前重复的了,提高效率。
看了好多博主的方法我才转过弯来,这脑子没谁了。
又重新写了一遍,还是好多错误,先不粘上来了。。#include
using namespace std;
#include
#include
int main()
{
long long int n, p;
long long * a = new long long[n];
for (int i = 0; i < n; ++i)
cin >> a[i];
int count = 0;
for (int i = 0; i < n; ++i)
{
for (int j = i + count; j < n; ++j)
{
if (a[j] * p <= a[i])
{
count++;
count = max(count, i - j + 1);
}
else
break;
}
}
cout << count;
return 0;
}