PAT甲级 1085 Perfect Sequence (25 分)

该博客指出1085 Perfect Sequence题目看似简单却有两个坑。一是中间过程m*p会超int,p和中间变量定义要用long long;二是统计满足条件数字个数时,优化方法是从i+res后开始。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

\quad题目看起来很简单,但有两个坑。一是p虽然没超过int范围,但中间过程m*p会超int,所有在p和中间变量定义时应该用long long;二是进行优化,具体的优化实在统计满足条件的数字个数时从i+res后开始即可

#include <bits/stdc++.h>
using namespace std;

int main(int argc, char const *argv[])
{
	int n;
	long long p;
	scanf("%d%lld", &n, &p);
	long long a[n];
	for (int i = 0; i < n; ++i)
	{
		scanf("%lld", &a[i]);
	}

	sort(a, a+n);
	int res = 0, count;
	for (int i = 0; i < n; ++i)
	{
		long long upper = a[i]*p;
		count = 0;
		// 因为是为了找最大的result,所以下一次j只要从i的result个后面开始找就行了
		// 这是一个很关键的优化,否则会超时
		for (int j = i+res; j < n; ++j)
		{
			if(a[j]>upper) break; 
			count = j-i+1;
		}
		if(count>res) res=count;
	}

	printf("%d\n", res);
	return 0;
}
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值