100pts 求 dalao 指点
查看原帖
100pts 求 dalao 指点
1126325
Indestructible楼主2024/7/8 11:25

提交记录 WA on #11 #12 #13

#include<bits/stdc++.h>
using namespace std;
const int maxn=45;
char input_string[maxn];
int number[maxn];
int number_length;
int split_count;
struct BigInteger{
	int numlist[maxn];
	int length;
	void clear(){
		memset(numlist,0,sizeof(numlist));
	}
	void print(){
		if (length==0){ printf("0\n"); return; }
		for (int i=length-1;i>=0;i--){
			printf("%d",numlist[i]);
		}
		printf("\n");
	}
};
BigInteger answer_number;
bool operator>(BigInteger x,BigInteger y){
	if (x.length>y.length) return 1;
	if (x.length<y.length) return 0;
	for (int i=x.length-1;i>=0;i--){
		if (x.numlist[i]>y.numlist[i]) return 1;
		if (x.numlist[i]<y.numlist[i]) return 0;
	}
	return 0;
}
BigInteger multiply(BigInteger factor,int l,int r){
	BigInteger factor2; factor2.clear();
	for (int i=l;i<=r;i++){
		factor2.numlist[r-i]=number[i];
	}
	factor2.length=r-l+1;
	BigInteger product; product.clear();
	for (int i=0;i<factor.length;i++){
		for (int j=0;j<factor2.length;j++){
			product.numlist[i+j]+=factor.numlist[i]*factor2.numlist[j];
			product.numlist[i+j+1]+=product.numlist[i+j]/10;
			product.numlist[i+j]%=10;
		}
	}
	if (product.numlist[factor.length+factor2.length-1]){
		product.length=factor.length+factor2.length;
	}else product.length=factor.length+factor2.length-1;
	return product;
}
BigInteger dfs(BigInteger final,int split,int startx){
	if (split==split_count){
		final=multiply(final,startx,number_length);
		answer_number=final>answer_number?final:answer_number;
		return final;
	}
	for (int i=startx;i<=number_length-split_count+split;i++){
		dfs(multiply(final,startx,i),split+1,i+1);
	}
	return final;
}
signed main(){
	scanf("%d%d%s",&number_length,&split_count,input_string+1);
	for (int i=1;i<=number_length;i++){
		number[i]=input_string[i]-'0';
	}
	answer_number.numlist[0]=1;
	answer_number.length=1;
	dfs(answer_number,0,1);
	answer_number.print();
	return 0;
}
2024/7/8 11:25
加载中...