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 ;
}
题目大意:一个画板,分成很多小格子,画家可以用红色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 ;
}
相关文章推荐
- async & await 的前世今生(Updated)
- hdu 5319 Painter 2015 Multi-University Training Contest 3
- SVN svnserve.conf: Option expected 的解决方法 以及 Authorization failed 的解决方法
- HDU-1867-A + B for you again
- 关于出现( linker command failed with exit code 1)错误总结
- 2015 Multi-University Training Contest 3 1002 RGCDQ(hdu5317)
- ZOJ 3450 Doraemon's Railgun (DP·分组背包)
- C++使用localtime函数需要注意的地方http://blog.csdn.net/shellching/article/details/8114266
- zoj 3450Doraemon's Railgun
- HDU 5326 Work 并查集 (2015 Multi-University Training Contest 3 2015多校联合)
- HDU 5319 Painter (2015 Multi-University Training Contest 3 2015多校联合)
- STL中的模板类pair 和map http://blog.csdn.net/calvin_zcx/article/details/6072286
- hdu 5317 RGCDQ 2015 Multi-University Training Contest 3
- 线程安全C/C++ http://blog.csdn.net/huangxy10/article/details/8068653
- mysql_num_rows()的作用的功能!!! http://zhidao.baidu.com/link?url=E-LmBdz-E5ff5PKfiXucFY-wWBLV4_vt6Cmg2i4k
- 模拟+思维 HDOJ 5319 Painter
- 多校3 1004 Painter
- Train Problem I
- HDU 5319 Painter(模拟)
- EAIPChina航图查看器项目手记