zoj 1051 A New Growth Industry

来源:互联网 发布:淘宝怎么签署图片协议 编辑:程序博客网 时间:2024/04/29 19:06

正确代码:

#include <iostream>#include<vector>#include<string.h>using namespace std; int main() {int n;cin >> n;int day;vector<int>D(16);int rec[20][20],next[20][20];string sign=".!X#";while(n--) {cin >> day;int today=1;int temp;for(int i=0;i<16;i++)cin >> D[i];for(int i=0;i<20;i++)for(int j=0;j<20;j++)cin >> rec[i][j];while(today<=day){for(int i=0;i<20;i++)for(int j=0;j<20;j++){temp=rec[i][j];if(i-1>=0)temp+=rec[i-1][j];if(i+1<20)temp+=rec[i+1][j];if(j-1>=0)temp+=rec[i][j-1];if(j+1<20)temp+=rec[i][j+1];next[i][j]=rec[i][j]+D[temp];if(next[i][j]>3)next[i][j]=3;if(next[i][j]<0)next[i][j]=0;}memcpy(rec,next,sizeof(rec));today++;}for(int i=0;i<20;i++)for(int j=0;j<20;j++){if(j<19)cout << sign[rec[i][j]];elsecout << sign[rec[i][j]] << endl;}if(n)cout << endl; //There is a blank line between output blocks.}return 0;}

分析:

这道题难点在读懂题意,每个点,即使是0也要根据题中给出的规则算day遍。

注意一下输出“between”。

另外,我一直使用的是vector,但是二维数组用vector的话稍微有点麻烦,如下:

vector <   vector <int>   >   array(3); 
          for(int   i=0;i <3;i++) 
                array[i].resize(3); //设置数组的大小3X3 
于是我直接用了二维数组。
提交时除了格式问题,还在today上出了问题。today应当放在while(n--)里面。
顺便一提,while(n--)是先用n判断,判断完再--。


0 0
原创粉丝点击