求助,为什么这样只有10分,k怎么用?
查看原帖
求助,为什么这样只有10分,k怎么用?
316681
zhongshizhao1楼主2022/1/19 16:58
#include <iostream>
using namespace std;
int a[205][205],k,n,m,n2,m2;
int dx[4]={0,0,1,-1},
	dy[4]={1,-1,0,0};
void dfs(int p,int q)
{
	for(int i=0;i<4;i++)
	{
		int x=p+dx[i];
		int y=q+dy[i];
		if(x>=1&&x<=n+n2&&y>=1&&y<=m2&&a[x][y]!=0&&a[x][y]!=999999)
		{
			if(a[x][y]==a[p][q])
			{
				a[x][y]=0;
				a[p][q]=0;
				return;
			}
			if(a[x][y]>a[p][q])
			{
				a[x][y]-=a[p][q];
				a[p][q]=0;
				return;
			}
			else
			{
				a[p][q]-=a[x][y];
				a[x][y]=0;
			}
		}
	}
}
int main()
{
	cin>>n>>m>>n2>>m2>>k;
	for(int i=1;i<=n;i++)
	{
		for(int j=1;j<=m;j++)
		{
			cin>>a[i][j];
		}
	}
	for(int i=n+1;i<=n+n2;i++)
	{
		for(int j=1;j<=m2;j++)
		{
			cin>>a[i][j];
		}
	}
	for(int i=1;i<=n+n2;i++)
	{
		for(int j=1;j<=m2;j++)
		{
			if(a[i][j]!=0&&a[i][j]!=999999)
			{
				dfs(i,j);
			}
		}
	}
	long long ans=0;
	for(int i=1;i<=n+n2;i++)
	{
		for(int j=1;j<=m2;j++)
		{
			if(a[i][j]!=999999)ans+=a[i][j];
		}
	}
	cout<<ans<<endl;
	return 0;
}
2022/1/19 16:58
加载中...