网站开发项目怎么接,怎么制作糖葫芦教程,关键词优化过程,想换掉做网站的公司Matrix Problem
题意#xff1a;
给你一个n * m的二维数据c#xff0c;c的每个元素值为0或1 现在要求你构造同样大小的数组a和b#xff0c;要求c[i][j] 1’的话#xff0c;a[i][j] b[i][j] ‘1’#xff0c;如果c[i][j] ‘0’.a[i][j]!b[i][j]#xff0c;且a和b中的1…Matrix Problem
题意
给你一个n * m的二维数据cc的每个元素值为0或1 现在要求你构造同样大小的数组a和b要求c[i][j] 1’的话a[i][j] b[i][j] ‘1’如果c[i][j] ‘0’.a[i][j]!b[i][j]且a和b中的1都是连通的输出a和b任意一种情况
题解
题目保证c的最外围是0既然给了这个条件且题目没说构造不出a和b的情况所以最外围保证了答案一定构成 我们先考虑a只要a确定了b就是取反(当然还要考虑c数组) 如何构造a我们可以让a的最外围全是1然后构造如果是偶数层就让a全等于1奇数层全是0也就是b全是1 但有可能这样蓝色部分为1绿色部分为0橙色部分为数组c等于1 这样蓝色是连通的但是绿色被隔断了b数组就不满足连通如何让绿色部分连通如果橙色部分在第三层就好了所以当c[i][j] ‘1’且i为奇数时这一层才可以成1因为这样上下两层才能通过橙块连通在一起
代码
//蒟蒻三人行
#includebits/stdc.h
typedef long long ll;
using namespace std;
const int maxn700;
char c[maxn][maxn];
char a[maxn][maxn];
char b[maxn][maxn];
int main()
{int n,m;cinnm;char chgetchar(); for(int i1;in;i){for(int j1;jm;j){cinc[i][j];}chgetchar(); }for(int i1;in;i){int ans0;for(int j1;jm;j){if(i1||in||j1||jm){a[i][j]1;continue;}if(c[i][j]1){ans;a[i][j]1;} }if(ansi%21){for(int j2;jm;j)a[i][j]1;}else {for(int j2;jm;j)if(a[i][j]!1)a[i][j]0;}}for(int i1;in;i){for(int j1;jm;j){if(c[i][j]1)b[i][j]1;else if(a[i][j]1)b[i][j]0;else b[i][j]1;}}
// couttestendl;for(int i1;in;i){for(int j1;jm;j){couta[i][j];} coutendl;}
// couttestendl;for(int i1;in;i){for(int j1;jm;j){coutb[i][j];} coutendl;}
}
/*
3 3
000
000
0004 4
0000
0110
0000
000011 11
00000000000
01111011110
01000000010
01011111010
01010001010
01010101010
01010001010
01011011010
01000000010
01111111110
00000000000111111
100001
100001
100101
101001
100001
111111000000
011110
011110
011110
011110
011110
000000
*/