zoukankan      html  css  js  c++  java
  • 2801 LOL-盖伦的蹲草计划

    2801 LOL-盖伦的蹲草计划

     时间限制: 1 s

     空间限制: 256000 KB
     题目等级 : 黄金 Gold
     
     
    题目描述 Description

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

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

    输入描述 Input Description

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

    输出描述 Output Description

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

    样例输入 Sample Input

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

    样例输出 Sample Output

    Demacia Win!

    数据范围及提示 Data Size & Hint

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

    分类标签 

     思路:dfs+剪枝,不然会爆栈;

     1 #include<cstdio>
     2 #include<cstring>
     3 #include<queue>
     4 using namespace std;
     5 #define max(a,b) a>b?a:b;
     6 int n,m,k,tem,dir[4][2]={{1,0},{-1,0},{0,1},{0,-1}};
     7 char a[1600][1600];
     8 long long int cnt,an;
     9 void dfs(int si,int sj)
    10 {
    11     a[si][sj]='*';
    12     int xx,yy;
    13     for(int i=0;i<4;i++)
    14     {
    15         xx=si+dir[i][0];
    16         yy=sj+dir[i][1];
    17         if(xx>=0&&xx<m&&yy>=0&&yy<n&&a[xx][yy]=='.')
    18         {
    19             cnt++;
    20             if(3*cnt>=k)
    21                 return;
    22             dfs(xx,yy);
    23 
    24         }
    25         else
    26             continue;
    27     }
    28     return ;
    29 }
    30 int main()
    31 {
    32     scanf("%d%d%d",&m,&n,&k);
    33     int i,j;
    34     for(i=0;i<m;i++)
    35     {
    36         scanf("%s",a[i]);
    37     }
    38     for(i=0;i<m;i++)
    39     {
    40         for(j=0;j<n;j++)
    41         {
    42             if(a[i][j]=='.')
    43             {
    44                 cnt=1;
    45                 dfs(i,j);
    46                 an=max(cnt,an);
    47             }
    48             if(3*an>=k)
    49                 break;
    50         }
    51         if(3*an>=k)
    52             break;
    53     }
    54     if(3*an>=k)
    55     printf("Demacia Win!
    ");
    56     else
    57     printf("Demacia Lose!
    ");
    58 
    59 return 0;
    60 }
  • 相关阅读:
    About Inside the Azure Storage Outage of November 18th
    Microsoft Azure 的一些限制 Global
    js递归遍历树形json数据,根据关键字查找节点
    如何修改 WordPress 的默认 Gravatar 头像
    flatpickr功能强大的日期时间选择器插件
    express框架,使用 static 访问 public 内静态文件
    nodejs实时的检测系统文件的变化(无需重启服务)
    redis的常用命令
    NPM install -save 和 -save-dev 傻傻分不清
    Git的使用--如何将本地项目上传到Github
  • 原文地址:https://www.cnblogs.com/mjtcn/p/6746819.html
Copyright © 2011-2022 走看看