求助,过了大样例但是0tps
  • 板块P9836 种树
  • 楼主Li_wenjie
  • 当前回复0
  • 已保存回复0
  • 发布时间2023/11/13 16:21
  • 上次更新2023/11/13 18:58:19
查看原帖
求助,过了大样例但是0tps
457431
Li_wenjie楼主2023/11/13 16:21
#include<bits/stdc++.h>
using namespace std;
const int N=1e4+10;
const long long mod=998244353;
long long p[N],num[N];
long long c[N][N];
int maxx=0;
int solve(int n,int d)
{
	int ans=1;
	for(int i=2;i<=n;i++)
	{
		int k=0;
		while(n%i==0)
		{
			n/=i;
			k++;
		}
		if(k!=0)
		{
			maxx=max(maxx,i);
		}
		c[i][d]=k;
		ans*=k+1;
	}
	return ans;
}
int main()
{
	//freopen("plant.in","r",stdin);
	//freopen("plant.out","w",stdout);
	int n,w;
	cin>>n>>w;
	for(int i=1;i<=n;i++) 
	{
		cin>>p[i];
		num[i]=solve(p[i],i);
	}
	
	for(int i=2;i<=w;i++)
	{
		if(w==1) break;
		while(w%i==0)
		{
			w/=i;
			int t=0;
			maxx=max(maxx,i);
			for(int j=1;j<=n;j++)
			{
				if(t==0||c[i][j]<c[i][t]) t=j;
			}
			//cout<<t<<endl;
			c[i][t]++;
		}
	}
	unsigned long long ans=1;
	for(int i=1;i<=n;i++)
	{
		for(int j=1;j<=maxx;j++)
		{
			ans*=(c[j][i]+1);
			ans%=mod;
		}
	}
	cout<<ans;
}
2023/11/13 16:21
加载中...