HDU 5319 Painter

来源:互联网 发布:望京李春姬直播软件 编辑:程序博客网 时间:2024/05/22 06:44

分析:给你一个空白的图,你可以随意选几个连续的斜格子画线,红色只能\着画,蓝色只能/着画,每个格子只能被红线和蓝线涂一次,如何一个格子既有红色又有蓝色,就变成了绿色,给定你一个图,问至少画几条线。我们可以再拿一张"纸"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;  }


0 0
原创粉丝点击