日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Matrix Problem

發布時間:2023/12/3 编程问答 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Matrix Problem 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Matrix Problem

題意:

給你一個n * m的二維數據c,c的每個元素值為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,因為這樣上下兩層才能通過橙塊連通在一起

代碼:

//蒟蒻三人行 #include<bits/stdc++.h> typedef long long ll; using namespace std; const int maxn=700; char c[maxn][maxn]; char a[maxn][maxn]; char b[maxn][maxn]; int main() {int n,m;cin>>n>>m;char ch=getchar(); for(int i=1;i<=n;i++){for(int j=1;j<=m;j++){cin>>c[i][j];}ch=getchar(); }for(int i=1;i<=n;i++){int ans=0;for(int j=1;j<=m;j++){if(i==1||i==n||j==1||j==m){a[i][j]='1';continue;}if(c[i][j]=='1'){ans++;a[i][j]='1';} }if(ans&&i%2==1){for(int j=2;j<m;j++)a[i][j]='1';}else {for(int j=2;j<m;j++)if(a[i][j]!='1')a[i][j]='0';}}for(int i=1;i<=n;i++){for(int j=1;j<=m;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';}} // cout<<"test"<<endl;for(int i=1;i<=n;i++){for(int j=1;j<=m;j++){cout<<a[i][j];} cout<<endl;} // cout<<"test"<<endl;for(int i=1;i<=n;i++){for(int j=1;j<=m;j++){cout<<b[i][j];} cout<<endl;} } /* 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 */ 創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎

總結

以上是生活随笔為你收集整理的Matrix Problem的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。