问题
y总对于下面代码几乎完全相同的代码为何在acwing网页编辑器上输出不一样???
两代码vscode输出结果相同,而acwing “调试代码”输出结果不同
代码不同之处在于数据的定义方式
//*******************************
int a[MAXN],sum[MAXN],n;
ll dp[MAXN][MAXN];
// int a[MAXN],sum[MAXN];
// ll dp[MAXN][MAXN];
// int n;
//*******************************
测试数据
15
+ 2432543
-
+ 4567886
+ 65638788
-
+ 578943
-
-
+ 62356680
-
+ 711111
-
+ 998244352
-
-
结果显示
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=550,MAXN=550;
const int mod=998244353;
char op[MAXN];
//*******************************
int a[MAXN],sum[MAXN],n;
ll dp[MAXN][MAXN];
// int a[MAXN],sum[MAXN];
// ll dp[MAXN][MAXN];
// int n;
//*******************************
int main()
{
scanf("%d",&n);
for(int i=1;i<=n;i++)
{
scanf(" %c",&op[i]);
sum[i]=sum[i-1]+(op[i]=='+');
if(op[i]=='+') scanf("%d",&a[i]);
}
ll ans=0;
for(int x=1;x<=n;x++)
{
if(op[x]=='-')
continue;
memset(dp,0,sizeof(dp));
dp[0][0]=1;
for(int i=1;i<=n;i++)
{
for(int j=0;j<=sum[i];j++)
{
if(x!=i)
dp[i][j]=dp[i-1][j];
if(op[i]=='-')
{
if(i<x)
{
if(j==0)
dp[i][j]=(dp[i][j]+dp[i-1][j]+dp[i-1][j+1])%mod;
else
dp[i][j]=(dp[i][j]+dp[i-1][j+1])%mod;
}
else
dp[i][j]=(dp[i][j]+dp[i-1][j+1])%mod;
}
else
{
if(a[i]<a[x]||a[i]==a[x]&&i<x)
dp[i][j]=(dp[i][j]+dp[i-1][j-1])%mod;
else
dp[i][j]=(dp[i][j]+dp[i-1][j])%mod;
}
}
}
for(int j=0;j<=sum[n];j++)
{
ans=(ans+dp[n][j]*a[x])%mod;
cout<<dp[n][j]<<" \n"[j==sum[n]];
}
}
printf("%lld\n",ans);
return 0;
}
/*
15
+ 2432543
-
+ 4567886
+ 65638788
-
+ 578943
-
-
+ 62356680
-
+ 711111
-
+ 998244352
-
-
*/
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=550,MAXN=550;
const int mod=998244353;
char op[MAXN];
//*******************************
// int a[MAXN],sum[MAXN],n;
// ll dp[MAXN][MAXN];
int a[MAXN],sum[MAXN];
ll dp[MAXN][MAXN];
int n;
//*******************************
int main()
{
scanf("%d",&n);
for(int i=1;i<=n;i++)
{
scanf(" %c",&op[i]);
sum[i]=sum[i-1]+(op[i]=='+');
if(op[i]=='+') scanf("%d",&a[i]);
}
ll ans=0;
for(int x=1;x<=n;x++)
{
if(op[x]=='-')
continue;
memset(dp,0,sizeof(dp));
dp[0][0]=1;
for(int i=1;i<=n;i++)
{
for(int j=0;j<=sum[i];j++)
{
if(x!=i)
dp[i][j]=dp[i-1][j];
if(op[i]=='-')
{
if(i<x)
{
if(j==0)
dp[i][j]=(dp[i][j]+dp[i-1][j]+dp[i-1][j+1])%mod;
else
dp[i][j]=(dp[i][j]+dp[i-1][j+1])%mod;
}
else
dp[i][j]=(dp[i][j]+dp[i-1][j+1])%mod;
}
else
{
if(a[i]<a[x]||a[i]==a[x]&&i<x)
dp[i][j]=(dp[i][j]+dp[i-1][j-1])%mod;
else
dp[i][j]=(dp[i][j]+dp[i-1][j])%mod;
}
}
}
for(int j=0;j<=sum[n];j++)
{
ans=(ans+dp[n][j]*a[x])%mod;
cout<<dp[n][j]<<" \n"[j==sum[n]];
}
}
printf("%lld\n",ans);
return 0;
}
/*
15
+ 2432543
-
+ 4567886
+ 65638788
-
+ 578943
-
-
+ 62356680
-
+ 711111
-
+ 998244352
-
-
*/
是不是有数组越界了