【暴力】欠扁的 CD

D e s c r i p t i o n Description Description

【暴力】欠扁的 CD_第1张图片

I n p u t Input Input

【暴力】欠扁的 CD_第2张图片

O u t p u t Output Output

S a m p l e Sample Sample I n p u t Input Input
3 1
1 2 3
S a m p l e Sample Sample O u t p u t Output Output

3

H i n t Hint Hint

【暴力】欠扁的 CD_第3张图片

T r a i n Train Train o f of of T h o u g h t Thought Thought

数据比较水嗯
先用一个桶把A数组装起来
然后从大到小枚举公因数
然后再枚举这个公因数的倍数
然后累加,大于k就可以输出了

#include
#include
#include
#include
#define ll long long
using namespace std;

ll A[500005], B[500005];
ll n, k;

bool Check(int l)
{
	ll Sum = 0;
	for(ll i = 1; i * l <= A[n] && Sum < k; ++i)
		Sum += B[l * i];
	if(Sum >= k)return 1;
	return 0;
}

int main()
{
	scanf("%lld%lld", &n, &k);
	for(int i = 1; i <= n; ++i)
		scanf("%lld", &A[i]), B[A[i]]++;
	sort(A + 1, A + n + 1);
	for(int i = A[n]; i >= 1; --i)
		if(Check(i))
		{
			printf("%lld", i * k);
			break;
		}
	return 0;
}

你可能感兴趣的:(暴力,暴力)