首页 > 其他 > 详细

hdu5319Painter 模拟

时间:2015-07-28 23:11:59      阅读:572      评论: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
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!