問題描述
小明有一塊空地,他將這塊空地劃分為 n 行 m 列的小塊,每行和每列的長度都為 1。
小明選了其中的一些小塊空地,種上了草,其他小塊仍然保持是空地。
這些草長得很快,每個月,草都會向外長出一些,如果乙個小塊種了草,則它將向自己的上、下、左、右四小塊空地擴充套件,這四小塊空地都將變為有草的小塊。
請告訴小明,k 個月後空地上哪些地方有草。
輸入格式
輸入的第一行包含兩個整數 n, m。
接下來 n 行,每行包含 m 個字母,表示初始的空地狀態,字母之間沒有空格。如果為小數點,表示為空地,如果字母為 g,表示種了草。
接下來包含乙個整數 k。
輸出格式
輸出 n 行,每行包含 m 個字母,表示 k 個月後空地的狀態。如果為小數點,表示為空地,如果字母為 g,表示長了草。
樣例輸入
(在這裡為了方便大家看,我用中文打的標點符號)
4 5。。g 。。
。。。。。
。。g 。。
。。。。。
2樣例輸出
gggg.
gggg.
ggggg
.ggg.
評測用例規模與約定
對於 30% 的評測用例,2 <= n, m <= 20。
對於 70% 的評測用例,2 <= n, m <= 100。
對於所有評測用例,2 <= n, m <= 1000,1 <= k <= 1000。
思路:
我的想法比較粗暴簡單,如果在座各位有簡便演算法希望能夠指點指點我。
首先仔細讀題,草地會向上下左右的方向蔓延,在這裡我們反過來想,如果一塊空地的上下左右方向有草地,那麼那塊空地在這個月就會長草,因此我們只需要找到空地就可以了,然後對它上下左右方向進行判斷,理解起來簡單,但是感覺寫的**好長,暈。當然我們需要乙個超大的二維陣列。
#include
#include
#define n 1000
void
plant()
;void
copy()
;char ground[n]
[n];
char ground_c[n]
[n];
int n,m;
intmain()
}fflush
(stdin);
scanf
("%d"
,&k)
;for
(i=1
;i<=k;i++
)for
(i=0
;i(i!=n-1)
printf
("\n");
}return0;
}void
plant()
if(ground_c[i+1]
[j]==
'g')
if(ground_c[i]
[j-1]==
'g')
if(ground_c[i]
[j+1]==
'g')}}
}}void
copy()
}}
2023年藍橋杯模擬賽 長草
小明有一塊空地,他將這塊空地劃分為 n 行 m 列的小塊,每行和每列的長度都為 1。小明選了其中的一些小塊空地,種上了草,其他小塊仍然保持是空地。這些草長得很快,每個月,草都會向外長出一些,如果乙個小塊種了草,則它將向自己的上 下 左 右四小塊空地擴充套件,這四小塊空地都將變為有草的小塊。請告訴小明...
藍橋杯校內模擬賽
1200000有多少個約數 只計算正約數 include using namespace std intmain if i i n ans 1 printf d ans 96 在計算機儲存中,15.125gb是多少mb?include using namespace std intmain 在1至2...
藍橋杯 2020 4 18 校內模擬賽
在計算機儲存中,12.5mb是多少位元組?將lanqiao中的字母重新排列,可以得到不同的單詞,如lanqiao aailnoq等,注意這7個字母都要被用上,單詞不一定有具體的英文意義。請問,總共能排列如多少個不同的單詞。乙個包含有2019個結點的無向連通圖,最少包含多少條邊?由1對括號,可以組成一...