階段2 學校測試 思維轉化 矩陣

2021-10-10 16:56:27 字數 1384 閱讀 9327

矩陣

(matrix.cpp/c)

【問題描述】

有乙個n×n的矩陣。

初始時,(x,y)位置的顏色會作為a_給你,如果是「.」表示白色,如果是「#」表示黑色。

現在有一種染色操作,選擇兩個整數x,y∈[1,n],記(x,1),...,(x,n)的顏色為c_1,...,c_n,將(1,y),...,(n,y)的顏色賦為c_1,...,c_n。

你要求將矩陣染成全黑的最少步數。

無解輸出「-1」。

【輸入格式】

輸入檔名為matrix.in。

第一行乙個整數表示n。

接下來n行,每行n個字元表示整個矩陣。

【輸出格式】

輸出檔名為matrix.out。

輸出檔案只有一行,乙個整數表示答案。

【輸入輸出樣例】

matrix1.in

matrix1.out2#.

.#3matrix2.in

matrix2.out2..

..-1

【資料規模與約定】

對於30% 的資料,滿足n≤4。

對於另外20% 的資料,滿足每一列都至少有乙個黑色的格仔。

對於100% 的資料,滿足n≤1000。

所以我們就輕鬆的把目標——全盤染黑的狀態轉化到小目標——染黑一行

易證:只要棋盤中有乙個是黑的,就可以染黑一行。故唯一可能無解的情況是——沒有乙個是黑的

所以我們一行一行地搜尋,計算每一行的空缺。如果這個空缺所在的行 對應的列 有黑子,那麼操作一步就可以轉化過來。如果沒有的話,操作兩步也可以轉化過來(只要將有黑子的行調到這一列就可以了)。

將一行操作完成以後,我們看看哪一列需要進行操作,再將操作步數加上即可。

這裡還要落實兩個問題:

1.會不會出現在操作過程中莫名其妙就全盤染黑的情況?或者說,不按部就班投機取巧就能夠全盤染黑?

答:不會。操作一定是將行擺成列,只要開始時不是全黑的、並且沒有一行是全黑的,就不會出現列被全染黑的情況,因而不會全盤染黑。

2.操作兩步的過程要注意一點:將有黑子的行調到列這一步是具有永久性的,這一步操作之後這一列就有黑子了。

#include#include#include#includeusing namespace std;

char ss[1010][1010];

int n;

int cal[1010];

bool bbk[1010];

inline bool check()

return bk;

}inline int mymin(int x,int y){return x總結:

學會通過操作過程看到問題的本質,從而將總目標細化為小目標,同時在連線大小目標的時候要考慮清楚情況,系統分析,科學轉接。

測試階段流程

這次專案測試階段的流程我覺得還可以,記錄一下 1 開發完成之後,先出乙個版本,裝到測試伺服器上。這個伺服器上的版本是穩定的,不允許打補丁 2 測試人員每天測試,提交bug。開發人員同步修改,可以滯後一點 比如1 3天 但不能滯後太多 3 與測試伺服器保持穩定不同,開發人員每天晚些時候,比如說17 0...

測試階段流程

這次專案測試階段的流程我覺得還可以,記錄一下 1 開發完成之後,先出乙個版本,裝到測試伺服器上。這個伺服器上的版本是穩定的,不允許打補丁 2 測試人員每天測試,提交bug。開發人員同步修改,可以滯後一點 比如1 3天 但不能滯後太多 3 與測試伺服器保持穩定不同,開發人員每天晚些時候,比如說17 0...

階段測試專案

1.設計乙個資料表用於儲存圖書資訊,需要儲存圖書的書名,作者,出版社,封面 資訊。開發乙個帶介面的程式,使用者可以向資料表中新增紀錄,刪除記錄,也可以修改已有的圖書記錄,並可以根據書名,作者等條件查詢圖書 2.開發c s結構的圖書銷售管理系統,要求實現兩個模板 後台管理,包括管理種類,管理圖書庫存 ...