#include<bits/stdc++.h>
using namespace std;
const int MAX=55;
const int Dx[4]={0,-1,1,0};
const int Dy[4]={1,0,0,-1};
int N,M,K,Mark[MAX][MAX],Hash[MAX*MAX],Cnt=0,Ans=0;
vector<pair<int,int> > V;
set<int> S;
char G[MAX][MAX];
void dfs(int x,int y)
{
if (x<0||x>N-1||y<0||y>M-1||G[x][y]!='.'||Mark[x][y]!=-1)
return;
Mark[x][y]=Cnt;
Hash[Cnt]+=1;
for (int i=0;i<4;i++)
dfs(x+Dx[i],y+Dy[i]);
}
void init(int x,int y)
{
if (x<0||x>N-1||y<0||y>M-1||G[x][y]!='.')
return;
G[x][y]='x';
for (int i=0;i<4;i++)
init(x+Dx[i],y+Dy[i]);
}
int main()
{
memset(Mark,-1,sizeof(Mark));
memset(Hash,0,sizeof(Hash));
cin>>N>>M>>K;
for (int i=0;i<N;i++)
cin>>G[i];
for (int i=0;i<N;i++) {
init(i,0);
init(i,M-1);
}
for (int j=0;j<M;j++) {
init(0,j);
init(N-1,j);
}
for (int i=0;i<N;i++)
for (int j=0;j<M;j++)
if (G[i][j]=='.'&&Mark[i][j]==-1) {
dfs(i,j);
V.push_back(make_pair(Hash[Cnt],Cnt));
Cnt+=1;
}
sort(V.begin(),V.end());
for (int i=0,j=V.size()-K;i<j;i++) {
Ans+=V[i].first;
S.insert(V[i].second);
}
cout<<Ans<<endl;
for (int i=0;i<N;i++) {
for (int j=0;j<M;j++)
if (Mark[i][j]!=-1&&S.find(Mark[i][j])!=S.end())
cout<<'*';
else if (G[i][j]=='x')
cout<<'.';
else
cout<<G[i][j];
cout<<endl;
}
return 0;
}
CodeForces 723D Lakes in Berland DFS
最新推荐文章于 2021-01-27 17:07:31 发布