1030完美数列

一开始没搞懂题意,走了很多弯路。题目中说最小值是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;

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值