题目
传送门
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();
}
}