題意:
乙個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 表示,就是黑由...