您的位置:首页 > 大数据 > 人工智能

hdu5319(2015多校3)--Painter(暴力,,,)

2015-07-29 10:54 387 查看
题目链接:点击打开链接

题目大意:一个画板,分成很多小格子,画家可以用红色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 ;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: