51nod 1448 二染色問題

2021-07-10 03:52:19 字數 793 閱讀 2258

題意:

乙個n*n的網格,初始為白色。現在有乙個k*k的印章,每次操作:你可以用印章把網格中乙個k*k的子矩形染成黑色或白色。如果乙個格仔被多次染色,那麼後一次染色會覆蓋掉前一次的。現在,給你n*n的由黑白兩色構成的圖案board(board[i][j]為第i行第j列格仔的顏色,不是白字母『w』表示,就是黑由字母『b』表示),問是否能通過若干次操作,將網格從初始狀態染成圖案board的樣子。如果可以輸出」possible」,否則輸出」impossible」.

思路:

可以嘗試逆向思維,最後一塊無論是黑是白,都一定是kxk的連通塊。倒數第i塊,其一部分被最後的i-1塊遮擋,其餘部分必然同色且分布在kxk的矩形內。因此可以逆向貪心構造,直到每乙個小正方形被覆蓋為止。

可以通過某一種顏色的數量是否為0和打標記法來判斷是否存在需要蓋章的位置!

#include

#include

#include

using

namespace

std;

char s[30][30];int t,n,k;

int vis[30][30];

int main()

while(flag)

if((sum1==0||sum2==0)&&ff)}}

}}

}flag=1;

for(int i=1;i<=n;i++)}}

if(flag) puts("possible");

else

puts("impossible");

}}

51nod1448 二染色問題 想法題,好題

題目鏈結 1448 二染色問題 topcoder 基準時間限制 1 秒 空間限制 131072 kb 分值 40 難度 4級演算法題 乙個n n的網格,初始為白色。現在有乙個k k的印章,每次操作 你可以用印章把網格中乙個k k的子矩形染成黑色或白色。如果乙個格仔被多次染色,那麼後一次染色會覆蓋掉前...

51nod 2564 格仔染色

這道題原來是網路流 感覺我網路流水平不行 這種只有兩種選擇的可以源點向該點連一條容量為b的邊,該點向匯點連一條容量為w的邊,如果割掉了b證明選w,如果割掉了w證明選b 那麼 p 的限制怎麼加呢,新建乙個點 i 然後 i 往 i 流一條容量為 p 的邊 i 再向所有不合法的 j 連一條容量為正無窮的邊...

二染色問題

乙個n n的網格,初始為白色。現在有乙個k k的印章,每次操作 你可以用印章把網格中乙個k k的子矩形染成黑色或白色。如果乙個格仔被多次染色,那麼後一次染色會覆蓋掉前一次的。現在,給你n n的由黑白兩色構成的圖案board board i j 為第i行第j列格仔的顏色,不是白字母 w 表示,就是黑由...