10pts求助
查看原帖
10pts求助
837490
123456ph楼主2023/8/24 21:14

Rt

AC on #5

记录

代码如下

#include<bits/stdc++.h>
using namespace std;
int n,k;bool vis[110][12];
string s[110];
queue<char> q;
int d[4][2]={{1,0},{0,1},{0,-1},{-1,0}};
int dfs(int x,int y){
	int ans=1;vis[x][y]=1;
	for(int i = 0;i<4;i++){
		int dx=x+d[i][0],dy=y+d[i][1];
		if(dx<=n&&dx>=1&&dy<=10&&dy>=1&&vis[dx][dy]==0&&s[dx][dy]==s[x][y])ans+=dfs(dx,dy);
	}
	return ans;
}
void clear(int x,int y){
	s[x][y]='0';vis[x][y]=0;
	for(int i = 0;i<4;i++){
		int dx=x+d[i][0],dy=y+d[i][1];
		if(dx<=n&&dx>=1&&dy<=10&&dy>=1&&vis[dx][dy])clear(dx,dy);
	}
}
bool find(){
	bool f=0;
	for(int i = 1;i<=n;i++){
		for(int j = 1;j<=10;j++){
			if(s[i][j]!='0'&&dfs(i,j)>=k)clear(i,j),f=1;
		}
	}
	return f;
}
void down(){
	int k;bool f=0;
	for(int j = 1;j<=10;j++){
		for(int i = n;i;i--){
			if(s[i][j]!='0')q.push(s[i][j]);
		}
		for(int i = n;i;i--){
			if(q.empty())s[i][j]='0';
			else s[i][j]=q.front(),q.pop();
		}
	} 
}
int main(){
	cin>>n>>k;
	for(int i = 1;i<=n;i++){cin>>s[i];s[i]=" "+s[i];}
	while(1){
		if(find())down();
		else break;
	}
	for(int i = 1;i<=n;i++){
		for(int j = 1;j<=10;j++)cout<<s[i][j];
		cout<<endl;
	}
}
2023/8/24 21:14
加载中...