大样例过了,思路和题解一样WA20pts求调
  • 板块P9836 种树
  • 楼主wuhupai
  • 当前回复0
  • 已保存回复0
  • 发布时间2023/11/11 20:45
  • 上次更新2023/11/11 20:48:01
查看原帖
大样例过了,思路和题解一样WA20pts求调
544310
wuhupai楼主2023/11/11 20:45
#include<bits/stdc++.h>
using namespace std;
const long long mod=998244353; 
long long n,w,a[100005],num[12500],numw[12500],cnt=0,ans=1;//1229个质数 
bool vis[100005];
long long x[12500];//每个数分解 
priority_queue<long long,vector<long long>,greater<long long>>q[12500];
int main(){
	ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
	cin>>n>>w;
	for(long long i=2;i<=10500;i++){
		if(vis[i]==false){
			cnt++;
			num[cnt]=i;
		}
		for(long long j=1;j<=cnt&&i*num[j]<=10500;j++){
			vis[i*num[j]]=true;
			if(i%num[j]==0) break;
		}
	}
	for(long long i=1;i<=n;i++){
		cin>>a[i];
		for(long long j=1;j<=cnt;j++){
			while(a[i]%num[j]==0){
				x[j]++;
				a[i]/=num[j];
			}
			q[j].push(x[j]+1);
		}
	}
	for(long long j=1;j<=cnt;j++){
		if(w==1) break;
		while(w%num[j]==0){
			numw[j]++;
			w=w/num[j];
		}
	}
	for(long long i=1;i<=cnt;i++){
		for(long long j=1;j<=numw[i];j++){
			long long g=q[i].top();
			//cout<<g<<" ";
			q[i].pop();
			q[i].push(g+1);
		}
	}
	for(long long i=1;i<=cnt;i++){
		while(!q[i].empty()){
			ans=(ans*q[i].top())%mod;
			q[i].pop();
		}
	}
	cout<<ans<<endl;
	
	return 0;
}
2023/11/11 20:45
加载中...