94pts WA #20 求调
  • 板块P9836 种树
  • 楼主OIer_Eternity
  • 当前回复0
  • 已保存回复0
  • 发布时间2023/11/16 14:28
  • 上次更新2023/11/16 16:36:04
查看原帖
94pts WA #20 求调
508129
OIer_Eternity楼主2023/11/16 14:28
#include<bits/stdc++.h>
using namespace std;
int n,w,p,cnt[10005];
priority_queue<int> q[10005];
int main(){
	scanf("%d%d",&n,&w);
	for (int i=1;i<=n;i++){
		scanf("%d",&p);
		for (int j=2;j*j<=p;j++)
			if (p%j==0){
				while (p%j==0) cnt[j]++,p/=j;
				q[j].push(-cnt[j]-1);
				cnt[j]=0;
			}
		if (p>1) q[p].push(-2);
	}
    memset(cnt,0,sizeof cnt);
    int w0=w;
    for (int i=2;i*i<=w0;i++) while (w0%i==0) cnt[i]++,w0/=i;
    if (w0>1) cnt[w0]++;
	for (int i=2;i<=10000;i++) for (int j=1;j<=min(n-(int)q[i].size(),cnt[i]);j++) q[i].push(-1);
	for (int i=2;i*i<=w;i++) while (w%i==0) q[i].push(q[i].top()-1),q[i].pop(),w/=i;
	if (w>1) q[w].push(q[w].top()-1),q[w].pop();
	int ans=1;
	for (int i=2;i<=10000;i++) while (!q[i].empty()) ans=1ll*ans*(-q[i].top())%998244353,q[i].pop();
	printf("%d\n",ans);
	return 0;
}
2023/11/16 14:28
加载中...