码迷,mamicode.com
首页 > 其他好文 > 详细

hdu5319Painter 模拟

时间:2015-07-28 23:14:50      阅读:135      评论:0      收藏:0      [点我收藏+]

标签:模拟

//给一个图,可以红色‘\‘这样刷,蓝色‘/‘这样刷,一个有两种颜色就变成黄色
//每次可以刷任意格子,给出最种状态,问最少需要刷几次
#include<cstdio>
#include<cstring>
#include<iostream>
using namespace std ;
const int maxn = 110 ;
char str[maxn][maxn] ;
int main()
{
    int T ;
    scanf("%d" ,&T) ;
    while(T--)
    {
        int n ;
        scanf("%d" ,&n) ;
        for(int i = 0;i < n;i++)
            scanf("%s" ,str[i]);
        int m = strlen(str[0]) ;
        int ans = 0;
        for(int i = 0;i < m;i++){//str[i][j]右上角的特点是j-i为定值
            int flag = 0 ;
            for(int j = 0;i + j < m&&j<n;j++)
            if((str[j][i+j] == ‘R‘||str[j][i+j]==‘G‘)&&!flag){ans++;flag = 1;}
            else if(str[j][i+j] != ‘R‘&&str[j][i+j]!=‘G‘)flag = 0;
        }
        for(int i = 1;i < n;i++)//str[i][j]左下角的特点是i-j为定值
        {
            int flag = 0 ;
            for(int j = 0;i+j < n && j < m;j++)
            if((str[i+j][j] == ‘R‘||str[i+j][j]==‘G‘)&&!flag){ans++;flag = 1;}
            else if(str[j+i][j] != ‘R‘&&str[j+i][j]!=‘G‘)flag = 0;
        }
        for(int i = 0;i < m ;i++)//str[i][j]左上角的特点i+j为定值
        {
            int flag = 0 ;
            for(int j = 0;j <= i &&j < n;j++)
            if((str[j][i-j] == ‘B‘||str[j][i-j] == ‘G‘)&&!flag){ans++;flag=1;}
            else if(str[j][i-j] != ‘B‘&&str[j][i-j]!=‘G‘)flag = 0;
        }
        for(int i = 1;i < n;i++)//str[i][j]右下角的特点为i+j为定值
        {
            int flag = 0 ;
            for(int j = 0;i + j < n && j < m;j++)
            {
                if((str[i+j][m-1-j] == ‘B‘||str[j+i][m-1-j] == ‘G‘)&&!flag){ans++;flag=1;}
                else if(str[i+j][m-1-j]!=‘B‘&&str[j+i][m-1-j]!=‘G‘)flag = 0;
            }
        }
        cout<<ans<<endl;
    }
}























版权声明:本文为博主原创文章,未经博主允许不得转载。

hdu5319Painter 模拟

标签:模拟

原文地址:http://blog.csdn.net/cq_pf/article/details/47112343

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!