藍橋杯模擬題——長草問題

Cao_Kuan發表於2020-10-04

<p>【問題描述】
<br>小明有一塊空地,他將這塊空地劃分為 n 行 m 列的小塊,每行和每列的長度都為 1。
<br>小明選了其中的一些小塊空地,種上了草,其他小塊仍然保持是空地。
<br>這些草長得很快,每個月,草都會向外長出一些,如果一個小塊種了草,則它將向自己的上、下、左、右四小塊空地擴充套件,這四小塊空地都將變為有草的小塊。
<br>請告訴小明,k 個月後空地上哪些地方有草。
<br>【輸入格式】
<br>輸入的第一行包含兩個整數 n, m。
<br>接下來 n 行,每行包含 m 個字母,表示初始的空地狀態,字母之間沒有空格。如果為小數點,表示為空地,如果字母為 g,表示種了草。
<br>接下來包含一個整數 k。
<br>【輸出格式】
<br>輸出 n 行,每行包含 m 個字母,表示 k 個月後空地的狀態。如果為小數點,表示為空地,如果字母為 g,表示長了草。
<br>【樣例輸入】
<br>4 5
<br>.g...
<br>.....
<br>..g..
<br>.....
<br>2
<br>【樣例輸出】
<br>gggg.
<br>gggg.
<br>ggggg
<br>.ggg.
<br>【評測用例規模與約定】
<br>對於 30% 的評測用例,2 &lt;= n, m &lt;= 20。
<br>對於 70% 的評測用例,2 &lt;= n, m &lt;= 100。
<br>對於所有評測用例,2 &lt;= n, m &lt;= 1000,1 &lt;= k &lt;= 1000。
c程式(應該會超時)

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
/* run this program using the console pauser or add your own getch, system("pause") or input loop */
int m,n;
char ground[1000][1000];
char color[1000][1000];



int main()
{
	int k,i,j;
	scanf("%d %d",&n,&m);
	getchar();
	for(i=0;i<n;i++)
	{
		for(j=0;j<m;j++)
	    scanf("%c",&ground[i][j]); 
		getchar();
	}
	scanf("%d",&k);
	while(k--){
	for(i=0;i<n;i++)
	for(j=0;j<m;j++)
	{
		if(ground[i][j]=='g')
		color[i][j]='1';
		else
		color[i][j]='0';
	}
	for(i=0;i<n;i++)
	for(j=0;j<m;j++)
	{
		if(color[i][j]=='1')
		{
			if(((j-1)>=0)&&(ground[i][j-1]!='g'))
			ground[i][j-1]='g';
			if(((j+1)<m)&&(ground[i][j+1]!='g'))
			ground[i][j+1]='g';
			if(((i-1)>=0)&&(ground[i-1][j]!='g'))
			ground[i-1][j]='g';
			if(((i+1)<n)&&(ground[i+1][j]!='g'))
			ground[i+1][j]='g';
		}
	}
    }
    for(i=0;i<n;i++)
    {
    	for(j=0;j<m;j++)
    	printf("%c",ground[i][j]);
    	printf("\n");
	}
    
    

}

 

相關文章