C++代码
  1. /*     
  2. Title: A New Growth Industry     
  3. Problem URL: http://acm.zju.edu.cn/show_problem.php?pid=1051  
  4. Author: fairylan  
  5. Date: 2008-02-07  
  6. Reference: http://blog.csdn.net/fairylan/archive/2006/07/10/900817.aspx  
  7. Description: Accepted 1051 C++ 00:00.00 392K  
  8. */  
  9.   
  10. #include <stdio.h>   
  11. #include <string.h>   
  12. #define MAXN 20   
  13. char ch[]=".!X#";   
  14. int dish[MAXN][MAXN],res[MAXN][MAXN];   
  15. int day,d[16];   
  16. void solve()   
  17. {   
  18.        int i,j,k;   
  19.        scanf ("%d",&day);   
  20.        for (k=0; k<16; ++k) scanf ("%d",&d[k]);   
  21.        for (i=0; i<MAXN; ++i)   
  22.               for (j=0; j<MAXN; ++j)   
  23.                      scanf ("%d",&dish[i][j]);   
  24.        while (day–){   
  25.               for (i=0; i<MAXN; ++i)   
  26.                      for (j=0; j<MAXN; ++j){   
  27.                             k = dish[i][j];   
  28.                             if (i-1>=0) k += dish[i-1][j];   
  29.                             if (i+1<MAXN) k += dish[i+1][j];   
  30.                             if (j-1>=0) k += dish[i][j-1];   
  31.                             if (j+1<MAXN) k += dish[i][j+1];   
  32.                             res[i][j] = dish[i][j]+d[k];   
  33.                             if (res[i][j]>3) res[i][j] = 3;   
  34.                             if (res[i][j]<0) res[i][j] = 0;   
  35.                      }   
  36.               memcpy (dish,res,sizeof(dish));   
  37.        }   
  38.        for (i=0; i<MAXN; ++i){   
  39.               for (j=0; j<MAXN; ++j)   
  40.                      printf ("%c",ch[dish[i][j]]);   
  41.               printf ("\n");   
  42.        }   
  43. }   
  44. int main()   
  45. {   
  46. #ifdef ONLINE_JUDGE   
  47. #else    
  48.        freopen("1051.txt","r",stdin);   
  49. #endif   
  50.        int t;   
  51.        while (scanf("%d",&t)!=EOF)   
  52.               while (t–){   
  53.                      solve();   
  54.                      if (t) printf ("\n");   
  55.               }   
  56. #ifdef ONLINE_JUDGE   
  57. #else    
  58.        fclose(stdin);   
  59. #endif   
  60.        return 0;   
  61. }