P8909 [RC-06] Multiples 题解

思路

因为 \(a_i\)\(1 \sim 10^9\) 均匀随机生成,所以可以考虑枚举 \(a_i\) 的倍数,用 \(map\) 记录每个数被枚举的次数。

代码如下

#include <bits/stdc++.h>

// #define int long long
#define rep(i, l, r) for(int i = l; i <= r; ++ i)

using namespace std;

const int MAXN = 2510;

map <int, int> mp;

int n, m, x;
int ans[MAXN];

main()
{
	cin >> n >> m;
	ans[0] = m;

	rep(i, 1, n)
	{
		cin >> x;
		for(int j = x; j <= m; j += x)
			++ mp[j];
	}

	for(auto i = mp.begin(); i != mp.end(); ++ i)
	{
		++ ans[i->second];
		-- ans[0];
	}

	rep(i, 0, n)
		cout << ans[i] << " ";
	return 0;
}
posted @ 2023-07-01 10:58  liukejie  阅读(6)  评论(0编辑  收藏  举报