莫名RE,怎么回事呢?
查看原帖
莫名RE,怎么回事呢?
285053
Demon_King楼主2021/11/19 20:12

不加O2全错,加O2每次都RE2~3个点,而且...它还是随机错的!比如说我拿之前90分的代码,重新交一次,就只有70分了。在本地测试一切正常,且基本排除了数组超限的可能性。这是怎么一回事呢?有没有人出现和我一样的问题?求助!

#include <bits/stdc++.h>
using namespace std;
int n,k,number[500][500][500],mul[1005];
int f[45][45][1005];

bool cmp(int a[1005],int b[1005]){
	if(a[0]<b[0]) return true;
	if(a[0]>b[0]) return false;
	for(int i=a[0];i;i--){
		if(a[i]<b[i]) return true;
		if(a[i]>b[i]) return false;
	}
	return false;
}

void Xmul(int a[1005],int b[1005]){
	memset(mul,0,sizeof(mul));
	mul[0]=a[0]+b[0]-1;
	for(int i=1;i<=a[0];i++)
		for(int j=1;j<=b[0];j++)
			mul[i+j-1]+=b[j]*a[i];
	int q=0;
	for(int i=1;i<=mul[0];i++){
		mul[i]+=q;
		q=mul[i]/10;
		mul[i]%=10;
	}
	while(q>0){
		mul[++mul[0]]=q%10;
		q/=10;
	}
}

int main(){
	scanf("%d%d",&n,&k);
	char c[105]; scanf("%s",c+1);
	for(int i=1;i<=n;i++)
		for(int j=i;j<=n;j++){
			number[i][j][0]=j-i+1;
			for(int k=1;k<=j-i+1;k++)
				number[i][j][k]=c[j-(i+k-1)+1+i-1]-'0';
		}
	for(int i=1;i<=n;i++){
		f[0][i][0]=i;
		for(int j=1;j<=i;j++)
			f[0][i][j]=c[i-j+1]-'0';
	}			
	for(int i=1;i<=k;i++){
		int maxx[105];
		for(int j=i+1;j<=n;j++){
			memset(maxx,0,sizeof(maxx));
			for(int t=i;t<j;t++){
				Xmul(f[i-1][t],number[t+1][j]);
				if(cmp(maxx,mul))
					for(int kkk=0;kkk<=mul[0];kkk++) maxx[kkk]=mul[kkk];
			}
			for(int t=0;t<=maxx[0];t++) f[i][j][t]=maxx[t];
		}
	}
	int maxx[1005];
	for(int i=k+1;i<=n;i++)
		if(cmp(maxx,f[k][i]))
			for(int j=1;j<=f[k][i][0];j++)
				maxx[j]=f[k][i][j];
	for(int i=maxx[0];i>0;i--) printf("%d",maxx[i]);
}
2021/11/19 20:12
加载中...