50分求调
查看原帖
50分求调
520626
louding楼主2023/12/19 21:25

样例能过

#include<bits/stdc++.h>
using namespace std;
int game[120][16];
int n,k;
int dx[7]={0,1,0,-1,0},dy[7]={0,0,1,0,-1},vis[120][16],Size;
void floodfill(int sx,int sy,int num)//num: type of haybale
{
	Size++;
	vis[sx][sy]=1;
	for(int i=1;i<=4;++i)
	{
		int x=sx+dx[i],y=sy+dy[i];
		if(x<1||x>n||y<1||y>10||vis[x][y]||!(game[x][y]==num))
		continue;
		floodfill(x,y,num);
	}
}
void gravity()
{
	for(int col=1;col<=10;++col)
	{
		for(int row=n;row>=1;--row)//bottom to top
		if(game[row][col]==0)
		{
			for(int t=row;t>=1;--t)
			game[t][col]=game[t-1][col];
		}
	}
}
int main()
{
//	freopen("mooyomooyo.in","r",stdin);
   // freopen("mooyomooyo.out","w",stdout);
	cin>>n>>k;
	for(int i=1;i<=n;++i)
	for(int j=1;j<=10;++j)
	{
		char c;
		cin>>c;
		game[i][j]=c-48;
	}
	int flag;
	while(1)
	{
		gravity();
		flag=1;
		for(int i=1;i<=n;++i)
		for(int j=1;j<=10;++j)
		{
			Size=0;
			memset(vis,0,sizeof(vis));
			if(game[i][j]!=0)
			{
				floodfill(i,j,game[i][j]);
			}
			if(Size<k)
			continue;
			else
			{
				flag=0;
				for(int k=1;k<=n;++k)
				for(int l=1;l<=10;++l)
				{
					if(vis[k][l])
					game[k][l]=0;
				}
			}
		}
		gravity();
		if(flag)
		break;
		/*for(int i=1;i<=n;++i)
		{
			for(int j=1;j<=10;++j)
			cout<<game[i][j];
			cout<<endl;
		}
		cout<"*\n";*/
	}
	for(int i=1;i<=n;++i)
	{
		for(int j=1;j<=10;++j)
		cout<<game[i][j];
		cout<<endl;
	}
}
2023/12/19 21:25
加载中...