65pts WA 求调
  • 板块P9836 种树
  • 楼主PassName
  • 当前回复1
  • 已保存回复1
  • 发布时间2023/11/16 19:19
  • 上次更新2023/11/16 19:35:23
查看原帖
65pts WA 求调
524911
PassName楼主2023/11/16 19:19

RT,code:

#include <bits/stdc++.h>

#define rint register int
#define int long long
#define endl '\n'

using namespace std;

const int N = 2e4 + 5;
const int M = 2e2 + 5;
const int mod = 998244353;

int n, w;
int p[N];
int maxx = 0;
int c[N], d[N];
int m;

priority_queue<int, vector<int>, greater<int> > q[N];

void divide(int n)
{
	m = 0;
	memset(c, 0, sizeof c);
	memset(d, 0, sizeof d);
	for (rint i = 2; i <= sqrt(n); i++)
	{
		if (n % i == 0)
		{
			d[++m] = i;
			c[m] = 0;
			while (n % i == 0)
			{
				n /= i;
				c[m]++;
			}
		}
	}
	if (n > 1)
	{
		d[++m] = n;
		c[m] = 1;
	}
	maxx = max(maxx, m);
}

signed main()
{
	cin >> n >> w;
	for (rint i = 1; i <= n; i++)
	{
		cin >> p[i];
	}
	
	for (rint i = 1; i < N; i++)
    {
		q[i].push(0);
	}
	
	int ans = 1;
	for (rint i = 1; i <= n; i++)
	{
		divide(p[i]);
		for (rint j = 1; j <= m; j++)
		{
			q[d[j]].push(c[j]);
		}
	}
	
	divide(w);
	
	for (rint i = 1; i <= m; i++)
	{
		while (c[i]--)
		{
			int x = q[d[i]].top();
			q[d[i]].pop();
			q[d[i]].push(x + 1);
		}
	}
	
	
	for (rint i = 1; i < N; i++)
	{
		while (!q[i].empty())
		{
			int x = q[i].top();
			ans = ans * (x + 1) % mod;
			q[i].pop();
		}
	}
	
	cout << ans << endl;
	
	return 0;
}
2023/11/16 19:19
加载中...