标签:
题目链接:点击打开链接
题目大意:一个画板,分成很多小格子,画家可以用红色R的笔‘\‘,或者用蓝色B的笔‘/‘,一个格子中如果画了红色和蓝色,那么会变成绿色G,对与一个格子来说一种颜色只能画一次,给出画完后的画板,问最少需要多少次才能画完。
直接暴力,有上到下遍历,尽量画更多的地方
注意:没有给出画板的长
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std ;
char str[60][60] , s[60][60] ;
int n , m ;
void solve(int i,int j,int k1,int k2,char ch) {
while( i >= 0 && i < n && j >= 0 && j < m ) {
if( str[i][j] == ch ) {
if( s[i][j] == ch ) return ;
s[i][j] = ch ;
}
else if( str[i][j] == 'G' ) {
if( s[i][j] == 'G' ) return ;
if( s[i][j] == '\0' )
s[i][j] = ch ;
else if( s[i][j] != ch )
s[i][j] = 'G' ;
else return ;
}
else return ;
i += k1 ;
j += k2 ;
}
}
int main() {
int t , num ;
int i , j ;
scanf("%d", &t) ;
while( t-- ) {
memset(s,0,sizeof(s)) ;
scanf("%d", &n) ;
for(i = 0 ; i < n ; i++)
scanf("%s", str[i]) ;
m = strlen(str[0]) ;
num = 0 ;
for(i = 0 ; i < n ; i++) {
for(j = 0 ; j < m ; j++) {
if( str[i][j] == 'R' ) {
if( s[i][j] == '\0' ) {
solve(i,j,1,1,'R') ;
num++ ;
}
}
else if( str[i][j] == 'B' ) {
if( s[i][j] == '\0' ){
solve(i,j,1,-1,'B') ;
num++ ;
}
}
else if( str[i][j] == 'G' ) {
if( s[i][j] == '\0' ) {
solve(i,j,1,1,'R') ;
solve(i,j,1,-1,'B') ;
num += 2 ;
}
else if( s[i][j] == 'R' ){
solve(i,j,1,-1,'B') ;
num++ ;
}
else if( s[i][j] == 'B' ) {
solve(i,j,1,1,'R') ;
num++ ;
}
}
}
}
printf("%d\n", num) ;
}
return 0 ;
}
版权声明:本文为博主原创文章,未经博主允许不得转载。
hdu5319(2015多校3)--Painter(暴力,,,)
标签:
原文地址:http://blog.csdn.net/winddreams/article/details/47123769