题目
Sample Input
2
3 3
.O.
/|
(.)
3 4
OOO(
/|\
()))
Sample Output
1
4
题意:给你一个n*m的图,问图中有几个人,图中的某一部分也可以代表一个人
思路:暴力,找到的每一部分都消去和他是同一个人的那部分
AC code
#include<iostream>
#include<algorithm>
#include<cstring>
#include<cmath>
#include<map>
#include<sstream>
#include<queue>
#include<stack>
using namespace std;
int t,n,m;
char aa[120][120];
void solve()
{
memset(aa,0,sizeof(aa));
int s=0;
for(int i=0;i<n;i++)
cin>>aa[i];
for(int i=0;i<n;i++)
for(int j=0;j<m;j++)
{
if(aa[i][j]=='O')
{
aa[i][j]='.';
s++;
int p,q;
p=i+1,q=j-1;
if((p>=0)&&(p<n)&&(q>=0)&&(q<m)&&aa[p][q]=='/')aa[p][q]='.';
p=i+1,q=j;
if((p>=0)&&(p<n)&&(q>=0)&&(q<m)&&aa[p][q]=='|')aa[p][q]='.';
p=i+1,q=j+1;
if((p>=0)&&(p<n)&&(q>=0)&&(q<m)&&aa[p][q]=='\\')aa[p][q]='.';
p=i+2,q=j-1;
if((p>=0)&&(p<n)&&(q>=0)&&(q<m)&&aa[p][q]=='(')aa[p][q]='.';
p=i+2,q=j+1;
if((p>=0)&&(p<n)&&(q>=0)&&(q<m)&&aa[p][q]==')')aa[p][q]='.';
}
else if(aa[i][j]=='/')
{
aa[i][j]='.';
s++;
int p,q;
p=i-1,q=j+1;
if((p>=0)&&(p<n)&&(q>=0)&&(q<m)&&aa[p][q]=='O')aa[p][q]='.';
p=i,q=j+1;
if((p>=0)&&(p<n)&&(q>=0)&&(q<m)&&aa[p][q]=='|')aa[p][q]='.';
p=i,q=j+2;
if((p>=0)&&(p<n)&&(q>=0)&&(q<m)&&aa[p][q]=='\\')aa[p][q]='.';
p=i+1,q=j;
if((p>=0)&&(p<n)&&(q>=0)&&(q<m)&&aa[p][q]=='(')aa[p][q]='.';
p=i+1,q=j+2;
if((p>=0)&&(p<n)&&(q>=0)&&(q<m)&&aa[p][q]==')')aa[p][q]='.';
}
else if(aa[i][j]=='|')
{
aa[i][j]='.';
s++;
int p,q;
p=i-1,q=j;
if((p>=0)&&(p<n)&&(q>=0)&&(q<m)&&aa[p][q]=='O')aa[p][q]='.';
p=i,q=j-1;
if((p>=0)&&(p<n)&&(q>=0)&&(q<m)&&aa[p][q]=='/')aa[p][q]='.';
p=i,q=j+1;
if((p>=0)&&(p<n)&&(q>=0)&&(q<m)&&aa[p][q]=='\\')aa[p][q]='.';
p=i+1,q=j-1;
if((p>=0)&&(p<n)&&(q>=0)&&(q<m)&&aa[p][q]=='(')aa[p][q]='.';
p=i+1,q=j+1;
if((p>=0)&&(p<n)&&(q>=0)&&(q<m)&&aa[p][q]==')')aa[p][q]='.';
}
else if(aa[i][j]=='\\')
{
aa[i][j]='.';
s++;
int p,q;
p=i-1,q=j-1;
if((p>=0)&&(p<n)&&(q>=0)&&(q<m)&&aa[p][q]=='O')aa[p][q]='.';
p=i,q=j-2;
if((p>=0)&&(p<n)&&(q>=0)&&(q<m)&&aa[p][q]=='/')aa[p][q]='.';
p=i,q=j-1;
if((p>=0)&&(p<n)&&(q>=0)&&(q<m)&&aa[p][q]=='|')aa[p][q]='.';
p=i+1,q=j-2;
if((p>=0)&&(p<n)&&(q>=0)&&(q<m)&&aa[p][q]=='(')aa[p][q]='.';
p=i+1,q=j;
if((p>=0)&&(p<n)&&(q>=0)&&(q<m)&&aa[p][q]==')')aa[p][q]='.';
}
else if(aa[i][j]=='(')
{
aa[i][j]='.';
s++;
int p,q;
p=i-2,q=j+1;
if((p>=0)&&(p<n)&&(q>=0)&&(q<m)&&aa[p][q]=='O')aa[p][q]='.';
p=i-1,q=j;
if((p>=0)&&(p<n)&&(q>=0)&&(q<m)&&aa[p][q]=='/')aa[p][q]='.';
p=i-1,q=j+1;
if((p>=0)&&(p<n)&&(q>=0)&&(q<m)&&aa[p][q]=='|')aa[p][q]='.';
p=i-1,q=j+2;
if((p>=0)&&(p<n)&&(q>=0)&&(q<m)&&aa[p][q]=='\\')aa[p][q]='.';
p=i,q=j+2;
if((p>=0)&&(p<n)&&(q>=0)&&(q<m)&&aa[p][q]==')')aa[p][q]='.';
}
else if(aa[i][j]==')')
{
aa[i][j]='.';
s++;
int p,q;
p=i-2,q=j-1;
if((p>=0)&&(p<n)&&(q>=0)&&(q<m)&&aa[p][q]=='O')aa[p][q]='.';
p=i-1,q=j-2;
if((p>=0)&&(p<n)&&(q>=0)&&(q<m)&&aa[p][q]=='/')aa[p][q]='.';
p=i-1,q=j-1;
if((p>=0)&&(p<n)&&(q>=0)&&(q<m)&&aa[p][q]=='|')aa[p][q]='.';
p=i-1,q=j;
if((p>=0)&&(p<n)&&(q>=0)&&(q<m)&&aa[p][q]=='\\')aa[p][q]='.';
p=i,q=j-2;
if((p>=0)&&(p<n)&&(q>=0)&&(q<m)&&aa[p][q]=='(')aa[p][q]='.';
}
}
printf("%d\n",s);
}
int main()
{
ios::sync_with_stdio(0);
cin>>t;
while(t--)
{
cin>>n>>m;
solve();
}
}