提交记录 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;
}