遵义微商城网站建设平台,个人备案可以做影视网站吗,云南建设人力资源网站,做网站运营有前途正题
题目链接:https://www.luogu.com.cn/problem/CF525D 题目大意 n∗mn*mn∗m的网格#xff0c;有∗*∗和...#xff0c;每次可以将∗*∗改成...。求最少操作使得每个...所在的联通块都是一个矩形。 解题思路
因为一个大矩形中每一个小块也是一个矩形#xff0c;反之同理…正题
题目链接:https://www.luogu.com.cn/problem/CF525D 题目大意
n∗mn*mn∗m的网格有∗*∗和...每次可以将∗*∗改成...。求最少操作使得每个...所在的联通块都是一个矩形。 解题思路
因为一个大矩形中每一个小块也是一个矩形反之同理。那么我们只需要统计每个2∗22*22∗2的网格如果只有一个∗*∗那么这个∗*∗是需要去除的然后用类似bfsbfsbfs的方法来扩展即可。
时间复杂度O(nm)O(nm)O(nm) codecodecode
#includecstdio
#includecstring
#includealgorithm
#includequeue
using namespace std;
const int N2100;
int n,m,v[N][N],a[N][N];
queueint qx,qy;
char s[N];
void Change(int x,int y){v[x-1][y-1]--;v[x][y]--;v[x-1][y]--;v[x][y-1]--;if(v[x-1][y-1]1)qx.push(x-1),qy.push(y-1);if(v[x-1][y]1)qx.push(x-1),qy.push(y);if(v[x][y-1]1)qx.push(x),qy.push(y-1);if(v[x][y]1)qx.push(x),qy.push(y);a[x][y]0;return;
}
int main()
{scanf(%d%d,n,m);for(int i1;in;i){scanf(%s,s1);for(int j1;jm;j)a[i][j](s[j]*);}for(int i1;in;i)for(int j1;jm;j){v[i][j]a[i][j]a[i1][j]a[i][j1]a[i1][j1];if(v[i][j]1)qx.push(i),qy.push(j);}while(!qx.empty()){int xqx.front(),yqy.front();qx.pop();qy.pop();if(a[x][y])Change(x,y);if(a[x1][y])Change(x1,y);if(a[x][y1])Change(x,y1);if(a[x1][y1])Change(x1,y1);}for(int i1;in;i,putchar(\n))for(int j1;jm;j)if(a[i][j])printf(*);else printf(.);return 0;
}