C++代码
- /*
- Title: A New Growth Industry
- Problem URL: http://acm.zju.edu.cn/show_problem.php?pid=1051
- Author: fairylan
- Date: 2008-02-07
- Reference: http://blog.csdn.net/fairylan/archive/2006/07/10/900817.aspx
- Description: Accepted 1051 C++ 00:00.00 392K
- */
- #include <stdio.h>
- #include <string.h>
- #define MAXN 20
- char ch[]=".!X#";
- int dish[MAXN][MAXN],res[MAXN][MAXN];
- int day,d[16];
- void solve()
- {
- int i,j,k;
- scanf ("%d",&day);
- for (k=0; k<16; ++k) scanf ("%d",&d[k]);
- for (i=0; i<MAXN; ++i)
- for (j=0; j<MAXN; ++j)
- scanf ("%d",&dish[i][j]);
- while (day–){
- for (i=0; i<MAXN; ++i)
- for (j=0; j<MAXN; ++j){
- k = dish[i][j];
- if (i-1>=0) k += dish[i-1][j];
- if (i+1<MAXN) k += dish[i+1][j];
- if (j-1>=0) k += dish[i][j-1];
- if (j+1<MAXN) k += dish[i][j+1];
- res[i][j] = dish[i][j]+d[k];
- if (res[i][j]>3) res[i][j] = 3;
- if (res[i][j]<0) res[i][j] = 0;
- }
- memcpy (dish,res,sizeof(dish));
- }
- for (i=0; i<MAXN; ++i){
- for (j=0; j<MAXN; ++j)
- printf ("%c",ch[dish[i][j]]);
- printf ("\n");
- }
- }
- int main()
- {
- #ifdef ONLINE_JUDGE
- #else
- freopen("1051.txt","r",stdin);
- #endif
- int t;
- while (scanf("%d",&t)!=EOF)
- while (t–){
- solve();
- if (t) printf ("\n");
- }
- #ifdef ONLINE_JUDGE
- #else
- fclose(stdin);
- #endif
- return 0;
- }