样例能过
#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;
}
}