標籤:
簡單的類比.
給定天數n,給定D[0]~D[15]給定一個20*20的矩陣。
每個格子內有一個0~3的數字,表示細菌數。
每天,每個格子將加上D[k],k表示這個格子以及上下左右相鄰格子的細菌之和(矩陣外算作0個,每格細菌個數不能超過3,不能低於0)。
問n天后的細菌情況。
1 #include <iostream> 2 #include <cstdio> 3 using namespace std; 4 int t,n; 5 int d[16]; 6 int map[20][20],tmp[20][20]; 7 char arr[]={‘.‘,‘!‘,‘X‘,‘#‘}; 8 int main() 9 {10 scanf("%d",&t);11 while(t--)12 {13 scanf("%d",&n);14 for(int i=0;i<16;i++) scanf("%d",&d[i]);15 for(int i=0;i<20;i++)16 for(int j=0;j<20;j++)17 scanf("%d",&map[i][j]);18 int sum;19 while(n--)20 {21 for(int i=0;i<20;i++)22 for(int j=0;j<20;j++) tmp[i][j]=map[i][j];23 for(int i=0;i<20;i++)24 for(int j=0;j<20;j++)25 {26 sum=tmp[i][j];27 if(i>0) sum+=tmp[i-1][j];28 if(i<19) sum+=tmp[i+1][j];29 if(j>0) sum+=tmp[i][j-1];30 if(j<19) sum+=tmp[i][j+1];31 map[i][j]+=d[sum];32 map[i][j]= map[i][j]>3? 3:map[i][j];33 map[i][j]= map[i][j]<0? 0:map[i][j];34 }35 }36 for(int i=0;i<20;i++)37 {38 for(int j=0;j<20;j++)39 cout<<arr[map[i][j]];40 cout<<endl;41 }42 if(t) puts("");43 }44 }
HDU 1057 - A New Growth Industry