代码求助
  • 板块学术版
  • 楼主contly
  • 当前回复2
  • 已保存回复2
  • 发布时间2021/2/1 15:52
  • 上次更新2023/11/5 04:00:54
查看原帖
代码求助
277143
contly楼主2021/2/1 15:52
#include<iostream>
#include<cstring>
using namespace std;
int n,m,a[3005][3005],s[3005][3005];
int stc[3005],sn[3005],top;
long long sum,ans; 
void init()
{
	top=0;
	sum=0;
	memset(sn,0,sizeof(sn));
	memset(stc,0,sizeof(stc));
}
int solve(int x,int y)
{
	int i;
	init();
	int lx=y;
	while(lx>0&&a[x][lx]!=0) lx--;
	lx++;
	for(i=lx;i<=y;i++)
	{
		int tmp=s[x][i];
		while(tmp<stc[top])
		{
			top--;
		}
		if(tmp==stc[top])
		{
			continue;
		}
		top++;
		stc[top]=tmp;
		sn[top]=i; 
	}
	int fx;
	top=1;
	for(i=lx;i<=y;i++)
	{
		if(i==sn[top])
		{
			fx=stc[top];
			top++;
		}
		sum+=fx;
	}
	return sum;
}
int main()
{
	int i,j;
	cin>>n>>m;
	for(i=1;i<=n;i++)
	{
		for(j=1;j<=m;j++)
		{
			cin>>a[i][j];
			if(a[i][j]==1)
			{
				s[i][j]=s[i-1][j]+1;
			}
			else
			{
				s[i][j]=0;
			}
		}
	}
	for(i=1;i<=n;i++)
	{
		for(j=1;j<=m;j++)
		{
			if(a[i][j]==0)
			{
				continue;
			}
//			cout<<ans<<" ";
			ans+=solve(i,j);
		}
	}
	cout<<endl;
	cout<<ans;
	return 0;
}

以上是我的代码,可以看到有一行调试代码是被注释的

当调试输出在的时候,ans输出25;不在的时候,输出为28

灵异事件?求助

2021/2/1 15:52
加载中...