蹲草战术

问题 I: 省赛专用题(9)

时间限制: 1 Sec   内存限制: 128 MB
提交: 65   解决: 8
[ 提交][ 状态][ 讨论版]

题目描述

在很久很久以前,有A和B两个国家发生了战争。整个战场分成一个M行N列的矩阵,矩阵里面有着空地和几片草地。这些草地有大有小。一个1x1的草丛可以隐藏3个士兵,A国将领喜欢蹲草战术,只要整个军队可以隐藏在草丛里面,就可以胜利。将领要独自隐藏在一个草丛。


对于每个1×1的草从,它与周围(上下左右)的草丛是连在一起的。


输入

第一行输入三个数M,N,K(1<=m、n、k<=1500),来表示矩阵的行、列和军队士兵数量。

接下来M行N列,输入矩阵,“.”表示平底“*”表示草丛。

输出

如果军队士兵和将领都可以躲进草丛,则输出“Win!”否则输出“Lose!”

样例输入

3 3 6
.**
...
.*.

样例输出

Win!

#include
using namespace std;
char a[100][100];
long long int  m,n,k,s=0,t=0,maxn;
void dfs(int i,int j)
{
if(i>=0&&i<=m&&j>=0&&j<=n&&a[i][j]=='*')
    {
        a[i][j]='.';
        t++;
    }

    else
        return ;
    dfs(i+1,j);
    dfs(i-1,j);
    dfs(i,j+1);
    dfs(i,j-1);

}
int main()
{
cin>>m>>n>>k;
for( int i=0;i{
for(int j=0;j{
cin>>a[i][j];
}
}
for(int i=0;i{
for(int j=0;j{
if(a[i][j]=='*')
{
s++;
}
}
}
     maxn=10000000;
for(int i=0;i{
for(int j=0;j{
if(a[i][j]=='*')
{
dfs(i,j);
if(maxn>t)
maxn=t;
t=0;

}
}
}
if((s-maxn)*3>=k)
cout<<"Win!"<else
cout<<"Lose!"<return 0;
}

你可能感兴趣的:(蹲草战术)