题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5319
题意:用R颜色的笔只能画 \ ,用B颜色的笔只能画 / ,R颜色和B颜色的交点为G,给一幅画好的图,求最少画几笔。
思路:一看到1<=n<=50就知道,这题暴力一定可以过的
代码:
#include <stdio.h>
#include <string.h>
#include <iostream>
#include <algorithm>
#include <vector>
#include <string>
#include <stdlib.h>
using namespace std;
char a[55][55];
int main()
{
int t,i,j,n,x,y,len,numr,numb;
while(scanf("%d",&t)==1)
{
while(t--)
{
scanf("%d",&n);
for(i=0;i<n;i++)
scanf("%s",a[i]);
len=strlen(a[0]);
numr=numb=0;
for(i=0;i<n;i++)
{
for(j=0;j<len;j++)
{
if(a[i][j]=='R'||a[i][j]=='G')
{
if(a[i][j]=='G')
a[i][j]='B';
else
a[i][j]='.';
x=i+1;
y=j+1;
while((a[x][y]=='R'||a[x][y]=='G')&&x<n&&y<len)
{
if(a[x][y]=='G')
a[x][y]='B';
else
a[x][y]='.';
x++;
y++;
}
numr++;
}
}
for(j=0;j<len;j++)
{
if(a[i][j]=='B')
{
a[i][j]='.';
x=i+1;
y=j-1;
while((a[x][y]=='B'||a[x][y]=='G')&&(x<n&&y>=0))
{
if(a[x][y]=='G')
a[x][y]='R';
else
a[x][y]='.';
x++;
y--;
}
numb++;
}
}
}
printf("%d\n",numr+numb);
}
}
return 0;
}