Chinaunix首页 | 论坛 | 博客
  • 博客访问: 178579
  • 博文数量: 48
  • 博客积分: 4060
  • 博客等级: 上校
  • 技术积分: 1080
  • 用 户 组: 普通用户
  • 注册时间: 2007-12-23 23:24
文章分类

全部博文(48)

文章存档

2011年(1)

2010年(8)

2009年(2)

2008年(37)

我的朋友

分类: C/C++

2008-03-24 21:11:10

/*
1.当雷点在边界时不能周围的非雷点都加1,所以要判断是否到了边界,
  但是判断需要花时间,这里可以用一个小技巧取消边界判断,
  就是在申请2维数组时每一维多申请2个数,使得雷区周围有一圈,
  这样即便到了雷区的边界,数据加1也不会超过数组的范围

2.由于数据的大量读入,所以如果用scanf读的话,会调用函数m*n次,
  调用scanf函数是很费时间的,所以可以改进为用getchar()读字符,
  这样比scanf快很多,但是仍然要调用m*n次,所以要降低调用函数的次数,
  用gets读入,这样一行一行的读,使得调用次数减少一个数量级,
  当然输出也可以用相应的手法,用puts输出

3.数组初始化:一组数据除了完了,需要把数组赋值使之回到初始化的状态,
  如果用memset的话会比较慢,因为它会将整个数组初始化,而其实不用这么多,
  你只需要把数组中用过的部分初始化就可以了,用for循环来解决,
  用了多少初始化多少。

*/
 
#include
#include
char ch[1002][1002];
int dp[1002][1002];
int main()
{
    int i,j,m,n;
  while(scanf("%d%d",&n,&m)!=EOF)
  {
  memset(dp,0,sizeof(dp));
  /*
  for(i=1;i<=m+1;i++)
  for(j=1;j<=n+1;j++)
  dp[i][j]=0;
  getchar();
  */
  for(i=0;i  {
  scanf("%s",ch[i]);
  gets(ch[i]);                              
  for(j=0;j  if(ch[i][j]=='*')
  {
  //i+1 j+1
  dp[i][j]++;dp[i][j+1]++;dp[i][j+2]++;
  dp[i+1][j]++;dp[i+1][j+2]++;
  dp[i+2][j]++;dp[i+2][j+1]++;dp[i+2][j+2]++;             
  }
  }
  for(i=0;i  {
  for(j=0;j  if(ch[i][j]=='*') printf("*");
  else printf("%d",dp[i+1][j+1]);
  putchar('\n');               
  }
  putchar('\n');
  }  
}
/*
Name: "steel" Problem ID "44"
Submit Time: 2008/3/24-20:55

G++: Compile OK

Test  1:    Accepted    Time = 67 ms
Test  2:    Accepted    Time = 12 ms
Test  3:    Accepted    Time = 313 ms
Test  4:    Time Limit Exceed
--------------------------------
Problem ID     44
Test Result    Time Limit Exceed
Time Limit     500 ms
Total Memory   4976 Kb / 65536 Kb
Code Length    633 Bytes

*/
#include
#include
char ch[1002][1002];
int dp[1002][1002];
int main()
{
    int i,j,m,n;
  while(scanf("%d%d",&n,&m)!=EOF)
  {
  //memset(dp,0,sizeof(dp));
  for(i=1;i<=m+1;i++)
  for(j=1;j<=n+1;j++)
  dp[i][j]=0;
  getchar();
  for(i=0;i  {
  //scanf("%s",ch[i]);
  gets(ch[i]);                              
  for(j=0;j  if(ch[i][j]=='*')
  {
  //i+1 j+1
  dp[i][j]++;dp[i][j+1]++;dp[i][j+2]++;
  dp[i+1][j]++;dp[i+1][j+2]++;
  dp[i+2][j]++;dp[i+2][j+1]++;dp[i+2][j+2]++;             
  }
  }
  for(i=0;i  {
  for(j=0;j  if(ch[i][j]=='*') putchar('*');//printf("*");
  else putchar('0'+dp[i+1][j+1]);//printf("%d",dp[i+1][j+1]);
  putchar('\n');               
  }
  putchar('\n');
  }  
}

阅读(565) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~