只有90分,第五个点过不了QAQ,求助大佬
查看原帖
只有90分,第五个点过不了QAQ,求助大佬
656277
scyjz14楼主2022/1/21 16:36
#include <iostream>
#include <cmath>
using namespace std;
int maxcon(int n){//从2加到k的和小于n 时最大的k 
	int k;
	k=floor((-1.0*1+pow(8*n+9,0.5))/2);
	return k;
}
int n,k,modd,a[10005],len,p;
long long b[10005]={0};
void flatten(int l){//高精展平 
	for(int i=1;i<=l;++i){
		b[i+1]+=b[i]/10;
		b[i]%=10;
	}
}
void highmul(int n,int len){//高精乘低精 
	for(int i=1;i<=len;++i){
		b[i]*=n;
	}
	flatten(len+4);
}
int main(){
	cin>>n;
	k=maxcon(n);
	modd=n-(k*k+k-2)/2;//2到k的和+modd=n 
	for(int i=1;i<=k-1;++i){
		a[i]=i+1;
	}
	p=k-1; 
	for(;modd;){//从大到小逐个加一 
		a[p]+=1;
		p--;
		if(p==0)p=k-1;
		modd--;
	}
	for(int i=1;i<=k-1;++i){
		cout<<a[i]<<" ";
	}cout<<endl;
	b[1]=1;
	len=1;
	for(int i=1;i<=k-1;++i){
		highmul(a[i],len+11);
		for(;b[len+1];)
		    len++;
	}
	for(int i=len;i>=1;i--){
		cout<<b[i];
	}
	return 0;
}
2022/1/21 16:36
加载中...