传纸条 NOIP2008 c++编译错误求解决
发布网友
发布时间:2022-04-24 14:59
我来回答
共1个回答
热心网友
时间:2022-04-28 10:28
#include<cstdio>
#include<cstring>
#include<iostream>
#include<string>
using namespace std;
#define for_up(i,a,b) for(i=a;i<=b;i++)
#define for_down(i,a,b) for(i=a;i>=b;i--)
// 不能引用数组s,要传递指针
void change_max(int a[],int b[],int s[])
{
int c[40],i,j,x,t,len1,len2,len3,lens;
len1=a[0];len2=b[0];lens=s[0];
memset(c,0,sizeof(c));
for_up(i,1,len1)
{
x=0;
for_up(j,1,len2)
{
t=c[i+j-1]+a[i]*b[j];
c[i+j-1]=t % 10;
x=t / 10;
}
c[i+len2]+=x;
}
len3=len1+len2+(x>0);
if (len3>lens) {s[0]=len3; for_up(i,1,len3) s[i]=c[i]; return; }
if (len3<lens) return;
for_down(i,lens,1)
if (c[i]>s[i]) {for_up(i,1,len3) s[i]=c[i]; return; }
else if (c[i]<s[i]) return;
}
int main()
{
// 数组 a 太大,无法运行
int n,m,i,j,k,t,a[41][41][7][40];
string s;
// 这里用换行是错误的,因为输入数值时必然要换行的。
cin>>n>>m;
cin>>s;
memset(a,0,sizeof(a));
for_up(i,1,n)
{
for_up(j,i,n)
{
a[i][j][0][0]=j-i+1;
// 这里的数组 s 用法错误
for_up(k,1,j-i+1) a[i][j][0][k]=s[i+k-1]-'0';
}
}
for_up(t,1,m)
for_up(i,1,n-1)
for_up(j,i+1,n)
{
// 数组 b 未定义,在程序中也无用,就注释掉了
//memset(b,0,sizeof(b));
for_up(k,i,j-1)
// 这里要传递第四维数组的首地址
change_max(&a[i][k][t-1][0],&a[k+1][j][t-1][0],&a[i][j][t][0]);
}
for_down(i,a[i][n][k][0],1)
printf("%d",a[1][n][k][i]);
return 0;
}