HDU 5319 Painter

来源:互联网 发布:二战三巨头知乎 编辑:程序博客网 时间:2024/06/05 00:20

分析

画布上有\R/B以及相交处的G,问画了几笔?

首先明确R只会是\画的,B只会是/画的。并且每一笔必然是一笔到底,两个端点顶到了画布的边界。

那么需要的是遍历整个画布,如果找到一条\(两点确定一条线),那么这条\就不应该再计数。考虑可以使用一个循环,滚一遍这条边把它置空(.)。当然,这里可以做一个简单的判断,因为是一笔到底,那么如果这是这笔画的头才计数,也能达到数笔画的效果。同理如果找到一条/也要计数。

因为两点确定一条线,比较特别的是G,它即可以表达R,也可以表达B,如果要明确的话,在存入数组时可以转换为三种状态1,2,3。

思路

如何设计笔画的头?

因为头都在画布的边缘,如果我的这个画布用数组存储,但是把第0行第0列最末列空余,判断时,只要向上找那一笔检查是不是笔画,如果不是笔画就说明是边缘,那么就需要计数。

代码

#include <cstdio>char G[55][55];int N;void solve(){    int r = 0;    for (int i = 1; i <= N; i++)        for (int j = 1; G[i][j]; j++) {            if ((G[i][j] == 'R' || G[i][j] == 'G') &&\                (G[i-1][j-1] != 'R' && G[i-1][j-1] != 'G'))                r++;            if ((G[i][j] == 'B' || G[i][j] == 'G') &&\                (G[i-1][j+1] != 'B' && G[i-1][j+1] != 'G'))                r++;        }    printf("%d\n", r);}int main(){    int T;    scanf("%d", &T);    while (T--) {        scanf("%d", &N);        for (int i = 1; i <= N; i++) scanf("%s", G[i]+1);        solve();    }    return 0;}

题目

Description

Mr. Hdu is an painter, as we all know, painters need ideas to innovate , one day, he got stuck in rut and the ideas dry up, he took out a drawing board and began to draw casually. Imagine the board is a rectangle, consists of several square grids. He drew diagonally, so there are two kinds of draws, one is like ‘\’ , the other is like ‘/’. In each draw he choose arbitrary number of grids to draw. He always drew the first kind in red color, and drew the other kind in blue color, when a grid is drew by both red and blue, it becomes green. A grid will never be drew by the same color more than one time. Now give you the ultimate state of the board, can you calculate the minimum time of draws to reach this state.

Input

The first line is an integer T describe the number of test cases.
Each test case begins with an integer number n describe the number of rows of the drawing board.

Then n lines of string consist of ‘R’ ‘B’ ‘G’ and ‘.’ of the same length. ‘.’ means the grid has not been drawn. (1<=n<=50)
The number of column of the rectangle is also less than 50.

Output

Output an integer as described in the problem description.

Sample Input

2
4
RR.B
.RG.
.BRR
B..R
4
RRBB
RGGB
BGGR
BBRR

Sample Output

3
6

0 0
原创粉丝点击