dfs+高精度60分WA#3#4#5#6求助!
查看原帖
dfs+高精度60分WA#3#4#5#6求助!
1344756
ROU_bing楼主2024/10/4 11:09

不用高精度60分,用了高精度还是60分,但WA的点居然还不一样()

#include <iostream>
#include <cstdio>
#include <cstring>

using namespace std;

int ans[1000],la=0;
int n,t,p[10];
string s="#",c;

void dfs(int last,int pleas);
void f();

int main(){
	scanf("%d%d",&n,&t);
	cin>>c;
	s+=c;
	p[0]=n;
	dfs(0,t);
	for (int i=0;i<la;i++)	printf("%d",ans[i]);
	return 0;
}

void dfs(int last,int pleas){
	if (pleas==0){
		f();	
		return;
	}
	for (int i=last+1;i<=n-t;i++){
		p[pleas]=i;
		dfs(i,pleas-1);
	}
}

void f(){
	int temp[1000]={0},lt=1,num[1000]={0},ln=0,num_[1000]={0},ln_=0,ans_[1000]={0},la_=0;
	temp[0]=1;
	int xb=t;
	for (int l=1;l<=n;l++){
		num[ln++]=s[l]-'0';
		if (l==p[xb]){
			xb--;
			for(int i=0;i<ln;i++)	num_[ln-i-1]=num[i];
			memset(num,0,sizeof(num));
			ln_=ln;
			ln=0;
			for(int i=0;i<lt;i++)	ans_[lt-i-1]=temp[i];
			memset(temp,0,sizeof(temp));
			la_=lt;
			lt=0;
			for (int i=0;i<ln_;i++)
				for (int j=0;j<la_;j++){
					temp[i+j]+=num_[i]*ans_[j];
					temp[i+j+1]+=temp[i+j]/10;
					temp[i+j]=temp[i+j]%10;
				}
			lt=ln_+la_;
			while (temp[lt-1]==0 && lt>1)
 			   lt-=1;
			memset(ans_,0,sizeof(ans_));
			for(int i=0;i<lt;i++)	ans_[lt-i-1]=temp[i];
			la_=lt;
			memcpy(temp,ans_,sizeof(temp));
			memset(num,0,sizeof(num));
			ln_=0;
		}
	}
	if (la_>la){
		la=la_;
		memcpy(ans,ans_,sizeof(ans));
		return;
	}else if (la_==la)
		for (int i=0;i<la_;i++)
			if (ans[i]!=ans_[i]){
				if (ans_[i]>ans[i])
					memcpy(ans,ans_,sizeof(ans));
				return;
			}
}
2024/10/4 11:09
加载中...