Untitled

 avatar
unknown
c_cpp
3 years ago
1.4 kB
6
Indexable
#include <bits/stdc++.h>
using namespace std;

struct data {
	int x, y, v;
	friend bool operator <(data x,data y){
		return x.v<y.v;
	}
};

const int N = 60;
int n,m,k;
char mp[N][N];
bool flag;
int now;
bool vis[N][N];
data t[N * N];
int total;
int ans;

bool star(int x, int y) {
    return x < 1 || y < 1 || x > n || y > m || mp[x][y] == '*' || vis[x][y];
}

void dfs(int x, int y){
	if(star(x, y)){
		return ;
	}
	vis[x][y]=1;
	now++;
	if(x==1||y==1||x==n||y==m){
		flag=0;
	}
	dfs(x+1,y);
	dfs(x-1,y);
	dfs(x,y-1);
	dfs(x,y+1);
}
void fil(int x,int y){
	if(x<1 || y<1 || x>n || y>m || mp[x][y] == '*'){
		return ;
	}
	mp[x][y]='*';
	fil(x+1,y);
	fil(x-1,y);
	fil(x,y-1);
	fil(x,y+1);
}
signed main(){
    ios_base::sync_with_stdio(false); cin.tie(nullptr);
	cin >> n >> m >> k;
	for(int i = 1;i <=n; i++){
		cin >> mp[i] + 1;
	}
	for(int i = 1;i <= n; i++){
		for(int j=1;j <= m; j++){
			if(!vis[i][j] && mp[i][j] == '.'){
				flag = 1;
				now = 0;
				dfs(i,j);
				if(flag){
					t[++total].v = now;
					t[total].x = i;
					t[total].y = j;
				}
			}
		}
	}
	sort(t+1,t+total+1);
	for(int i = 1;i <= total-k; i++){
		ans += t[i].v;
		fil(t[i].x,t[i].y);
	}
	cout << ans << '\n';
	for(int i = 1;i <= n; i++){
		for(int j=1;j <= m;j++){
			cout << mp[i][j];
		}
		cout << '\n';
	}
}
Editor is loading...