月赛div2第一题求助,90分,特判错误的那个点过不掉
查看原帖
月赛div2第一题求助,90分,特判错误的那个点过不掉
324573
Sin_qwq楼主2021/11/14 20:31

90分代码:

#include<bits/stdc++.h>
using namespace std;
const int N=100;
int n,k;
int tot=0,cnt=0,num=0,flag=0;
int ans[N],sum[N];
int a[16]={0,2,3,5,7,11,13,17,19,23,29,31,37,41,43,47};
inline void solve(int x)
{
	for(int i=1;i<=15;i++)
	{
		while(x%a[i]==0) x/=a[i],sum[a[i]]++;
	}
}
int main()
{
	cin>>n>>k;
	solve(n);
//    for(int i=1;i<=50;i++) if(sum[i]>0) cout<<i<<" "<<sum[i]<<" ";
	for(int i=1;i<=15;i++)
	{
		if(sum[a[i]]>0) for(int j=1;j<=sum[a[i]];j++) ans[++cnt]=a[i];
		num+=sum[a[i]],tot+=sum[a[i]]*a[i];
	}
	if(num+k-tot<=0){
		cout<<-1<<endl;
		return 0;
	}
	if(num==0){
		cout<<k-n+1<<endl;
		for(int i=1;i<=k-n;i++) cout<<"1 ";
		cout<<n<<endl;
		return 0;
	}	
	cout<<num+k-tot<<endl;
	for(int i=1;i<=k-tot;i++) cout<<"1 ";
	for(int i=1;i<=cnt;i++) cout<<ans[i]<<" ";
	cout<<endl;
	return 0;
}
2021/11/14 20:31
加载中...