hdu 5319 Painter(15多校第三场1004)

来源:互联网 发布:淘宝禁止好评返现2016 编辑:程序博客网 时间:2024/05/01 03:06
#include<cstdio>#include<cstring>#include<algorithm>#include <iostream>using namespace std;char map[100][100];bool vis[100][100];int D1[2][2]={{1,1},{-1,-1}};int D2[2][2]={{1,-1},{-1,1}};int n,m;bool check(int x,int y){    if(x<0||y<0||x>=n||y>=m)return 0;    return 1;}void dfs1(int x,int y){    vis[x][y]=1;    int xx=x,yy=y;    while(check(xx+D1[0][0],yy+D1[0][1])){        xx+=D1[0][0];yy+=D1[0][1];        if(map[xx][yy]=='B'||map[xx][yy]=='.')break;        if(map[xx][yy]=='G')map[xx][yy]='B';        else vis[xx][yy]=1;    }    xx=x,yy=y;    while(check(xx+D1[1][0],yy+D1[1][1])){        xx+=D1[1][0];yy+=D1[1][1];        if(map[xx][yy]=='B'||map[xx][yy]=='.')break;        if(map[xx][yy]=='G')map[xx][yy]='B';        else vis[xx][yy]=1;    }}void dfs2(int x,int y){    vis[x][y]=1;    int xx=x,yy=y;    while(check(xx+D2[0][0],yy+D2[0][1])){        xx+=D2[0][0];yy+=D2[0][1];        if(map[xx][yy]=='R'||map[xx][yy]=='.')break;        if(map[xx][yy]=='G')map[xx][yy]='R';        else vis[xx][yy]=1;    }    xx=x,yy=y;    while(check(xx+D2[1][0],yy+D2[1][1])){        xx+=D2[1][0];yy+=D2[1][1];        if(map[xx][yy]=='R'||map[xx][yy]=='.')break;        if(map[xx][yy]=='G')map[xx][yy]='R';        else vis[xx][yy]=1;    }}int main(){    int T;    scanf("%d",&T);    while(T--){        scanf("%d",&n);        memset(map,0,sizeof(map));        for(int i=0;i<n;i++)            scanf("%s",map[i]);                m=strlen(map[0]);        memset(vis,0,sizeof(vis));        int cnt=0;        for(int i=0;i<n;i++){            for(int j=0;j<m;j++){                if(!vis[i][j]&&map[i][j]!='.'){                    cnt++;                    if(map[i][j]=='R'){                        dfs1(i,j);                    }                    else if(map[i][j]=='B'){                        dfs2(i,j);                    }                    else if(map[i][j]=='G'){                        cnt++;                        dfs1(i,j);dfs2(i,j);                    }                }            }        }        printf("%d\n",cnt);    }    return 0;}

0 0
原创粉丝点击