您的位置:首页 > 大数据 > 人工智能

HDU 5319 Painter

2015-07-28 19:58 447 查看
分析:给你一个空白的图,你可以随意选几个连续的斜格子画线,红色只能\着画,蓝色只能/着画,每个格子只能被红线和蓝线涂一次,如何一个格子既有红色又有蓝色,就变成了绿色,给定你一个图,问至少画几条线。我们可以再拿一张"纸"g[60][60]来照着原图map[60][60]划线,每次都画能画的最长的长度。



# include <stdio.h>
# include <string.h>
  int main()
  {
      int i,j,k,t,n,m,ans;
      char map[60][60],g[60][60];
      scanf("%d",&t);
      while(t--)
      {
          ans=0;
          scanf("%d",&n);
          for(i=0;i<n;i++)
            scanf("%s",map[i]);
          m=strlen(map[0]);
          for(i=0;i<n;i++)
            for(j=0;j<m;j++)
              g[i][j]='.';
          for(i=0;i<n;i++)
            for(j=0;j<m;j++)
              if((map[i][j]=='R'||map[i][j]=='G')&&g[i][j]=='.')
              {
                  k=0;ans++;
                  while((i+k)>=0&&(i+k)<n&&(j+k)>=0&&(j+k)<m&&(map[i+k][j+k]=='R'||map[i+k][j+k]=='G')&&g[i+k][j+k]=='.')
                  {
                      g[i+k][j+k]='R';
                      k++;
                  }
              }
         for(i=0;i<n;i++)
            for(j=0;j<m;j++)
              if((map[i][j]=='B'||map[i][j]=='G')&&(g[i][j]=='.'||g[i][j]=='R'))
              {
                  k=0;ans++;
                  while((i+k)>=0&&(i+k)<n&&(j-k)>=0&&(j-k)<m&&(map[i+k][j-k]=='B'||map[i+k][j-k]=='G')&&(g[i+k][j-k]=='.'||g[i+k][j-k]=='R'))
                  {
                      g[i+k][j-k]=map[i+k][j-k];
                      k++;
                  }
              }
              printf("%d\n",ans);
      }
      return 0;
  }
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: