zoukankan      html  css  js  c++  java
  • 72.2801 LOL-盖伦的蹲草计划(广搜)

    时间限制: 1 s

     空间限制: 256000 KB

     题目等级 : 黄金 Gold

     查看运行结果

    题目描述 Description

    众所周知,LOL这款伟大的游戏,有个叫盖伦的英雄。他的伟大之处在于他特别喜欢蹲草丛阴人(XL:蹲草阴人也算英雄?!CZQ:没办法,个个都是这么玩的)。某日,德玛西亚与诺克萨斯之间又发生了一场战斗,嘉文四世希望盖伦能带领一支K人的德玛西亚军队出战。

    战斗发生在召唤师峡谷。整个召唤师峡谷被分割成MN列的一个矩阵,矩阵中有空地和几片草丛。这几片草丛中有些很大、有些很小。一个1×1的草丛能容纳3个士兵,盖伦坚信蹲草偷袭战术能战胜诺克萨斯军队,所以他希望他的军队能全部蹲进草丛里。当然,为了不影响盖伦的作战,盖伦需要单独霸占连起来的一片草丛(不管草丛有多大)。

     

    输入描述 Input Description

    第一行MNK,表示矩阵的行数、列数和士兵数量。
    接下来M行,输入矩阵,'.'代表平地,'*'代表草丛。

    输出描述 Output Description

    如果德玛西亚军队和盖伦都能躲进草丛里,则输出“Demacia Win!”,否则输出“Demacia Lose!”

    样例输入 Sample Input

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

    样例输出 Sample Output

    Demacia Win!

    数据范围及提示 Data Size & Hint

    1<=mn<=1500
    1<=k<=1500
    P.S
    :这里对于两个1×1的草丛是否连在一起的定义是:对于每个1×1的草从,它与周围(上下左右)的草丛是连在一起的。

    分类标签 Tags 点此展开 

    广度优先搜索 模拟 深度优先搜索 搜索

    基本思路:宽度优先搜索,输入时记录草丛的总数目,宽搜时找出最小的草丛,让盖伦待在那里,其余的点放小兵,把其余的点的数目*3与小兵的数目比较就可以了,

    代码:

    #include

    using namespace std;

    #include

    #include

    int n,m,jz[5002][5002]={0};

    int xx[4]={0,0,1,-1};

    int yy[4]={1,-1,0,0};

    const int INF=0x7fffffff;

    struct  Poi{

        int x,y;

       

    };

    Poi poi[5001*5001];

    long long head,tail,k,grasssum,mingrass=INF;

    char p[5002];

    void input()

    {

        scanf("%d%d%d",&m,&n,&k);

        for(int i=1;i<=m;++i)

        {

           memset(p,0,sizeof(p));

           scanf("%s",p+1);

           for(int j=1;j<=n;++j)

           {

               if(p[j]=='*')

               {

                  jz[i][j]=1;

                  grasssum++;

               }

           }

        }

       

    }

    void BFS()

    {

       

        for(int i=1;i<=m;++i)

        {

           for(int j=1;j<=n;++j)

           {

               head=0;tail=0;

               int sum=0;

               if(jz[i][j])

               {

                  poi[++tail].x=i;

                  poi[tail].y=j;

                    jz[i][j]=0;

               }

               while(head

               {

                  ++head;

                  int x1=poi[head].x,y1=poi[head].y;

                  sum++;

              

                  for(int l=0;l<=3;++l)

                  {

                      int x2=x1+xx[l],y2=y1+yy[l];

                      if(x2>=1&&x2<=m&&y2>=1&&y2<=n&&jz[x2][y2]==1)

                      {

                         ++tail;

                         poi[tail].x=x2;

                         poi[tail].y=y2;

                         jz[x2][y2]=0;

                      }

                  }

               }

               if(sum

               mingrass=sum;

               //if(sum!=0)

           //  cout<<sum<<endl;

              

           }

        }

    }

    int main()

    {

        input();

        BFS();

        grasssum-=mingrass;

        if(grasssum*3>=k)//xing

        printf("Demacia Win! ");

        else printf("Demacia Lose! ");

       

        return 0;

    }

  • 相关阅读:
    《DSP using MATLAB》 示例 Example 9.12
    《DSP using MATLAB》示例 Example 9.11
    《DSP using MATLAB》示例 Example 9.10
    《DSP using MATLAB》示例Example 9.9
    《DSP using MATLAB》示例 Example 9.8
    《DSP using MATLAB》示例Example 9.7
    《DSP using MATLAB》示例 Example 9.6
    《DSP using MATLAB》示例Example 9.5
    《DSP using MATLAB》示例 Example 9.4
    (转载)【C++11新特性】 nullptr关键字
  • 原文地址:https://www.cnblogs.com/csgc0131123/p/5290318.html
Copyright © 2011-2022 走看看