求助,60pts,但是在Dev.c++上测试下载wa的测试点过了
查看原帖
求助,60pts,但是在Dev.c++上测试下载wa的测试点过了
798144
SukiYuri楼主2023/8/24 19:11
#include<bits/stdc++.h>
using namespace std;
int a[50],maxx[5000],ans[5000],l,n,maxx_len;
int cheng(int* c,int* a,int* b,int alen,int blen){
	//memset(c,0,sizeof(int)*(alen+blen));
    for(int i=1;i<=alen+blen;i++){
        c[i]=0;
    }
	int cnt=alen+blen-1;
	for(int i=alen;i>0;i--){
		for(int j=blen;j>0;j--){
			c[alen+blen-i-j+1]+=a[i]*b[j];
			if(c[alen+blen-i-j+1]>9){
				int temp=c[alen+blen-i-j+1]/10;
				c[alen+blen-i-j+1]%=10;
				c[alen+blen-i-j+2]+=temp;
				
			}
		}
	}
	if(c[cnt+1]!=0)cnt++;
	for(int i=1;i<=cnt/2;i++){
		swap(c[i],c[cnt-i+1]);
	}
	if(c[1]==0)return 1;
	return cnt;
}
bool cmp(int* a,int* b,int alen,int blen){
	if(alen!=blen)return (alen>blen);
	for(int i=0;i<49;i++){
		if(a[i]!=b[i]){
			return(a[i]>b[i]);
		}
	}
	return false;
}
void dfs(int step,int* ans,int last,int ans_len){
	int temp[50],anss[50],temp_len=n-last,anss_len;
    if(step==l){
        for(int i=last+1;i<=n;i++){
            temp[i-last]=a[i];
        }
		anss_len=cheng(anss,temp,ans,temp_len,ans_len);
		if(cmp(anss,maxx,anss_len,maxx_len)){
			for(int i=1;i<=anss_len;i++){
				maxx[i]=anss[i];
			}
			maxx_len=anss_len;
		}
        return;
    }
    for(int i=last+1;i<=n-(l-step);i++){
    	temp[i-last]=a[i];
    	anss_len=cheng(anss,temp,ans,i-last,ans_len);
    	dfs(step+1,anss,i,anss_len);
	}
	return;
}
int main(){
    scanf("%d%d",&n,&l);
    for(int i=1;i<=n;i++){
        char ch;
        cin>>ch;
        a[i]=ch-48;
    }
    ans[1]=1;
    dfs(0,ans,0,1);
    for(int i=1;i<=maxx_len;i++){
    	cout<<maxx[i];
	}
    return 0;
}
2023/8/24 19:11
加载中...