zoukankan      html  css  js  c++  java
  • codevs 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的草从,它与周围(上下左右)的草丛是连在一起的。

    传送门  

    我大盖伦居然出现在这么水的题里,而且数据范围说了k>=1 最后一个点k=0 ,我大盖伦连个保镖也没有吗。

    代码  BFS

    #include <iostream>
    #include <cstring>
    #include <cstdio>
    
    using namespace std;
    
    int h,ans,i,j,m,n,k,xf[5]={1,-1,0,0},yf[5]={0,0,1,-1};
    char map[1501][1501];
    int ss(int x,int y)
    {
        int xx,yy,head=0,tail=1,f[3000][3];
        f[tail][1]=x;f[tail][2]=y;
        do{
            head++;
            for(i=0;i<4;++i)
            {
                xx=f[head][1]+xf[i];yy=f[head][2]+yf[i];
                if(xx>=0&&xx<m&&yy>=0&&yy<n&&map[xx][yy]=='.')
                {
                    tail++;
                    f[tail][1]=xx;
                    f[tail][2]=yy;
                    map[xx][yy]='#';
                }
            }
        }while(head<=tail);
        return head;
    }
    int main()
    {
        cin >> m >> n >> k;
        if(k==0)
        {
            cout<<"Demacia Win!";
            return 0;
        }
        for (i = 0 ;i < m ;++i)
        {
            for (j = 0 ;j < n ;++j)
            cin >> map[i][j];
        }
        for (i = 0 ;i < m ;++i)
        {
            for(j = 0 ;j < n ;++j)
            {
                if (map[i][j]=='.')
                {
                    ans=max(ss(i,j),ans);
                }
            }
        }
        if(ans*3>=k)
            cout<<"Demacia Win!";
        else cout<<"Demacia Lose!";
    }
    我们都在命运之湖上荡舟划桨,波浪起伏着而我们无法逃脱孤航。但是假使我们迷失了方向,波浪将指引我们穿越另一天的曙光。
  • 相关阅读:
    Longest Substring Without Repeating Characters
    Longest Valid Parentheses
    LInux下编译发生的libc相关错误
    【转载】字符编码笔记:ASCII,Unicode和UTF-8
    Python深入:super函数
    Python基础:常用函数
    25最小操作数问题
    24字符串最短编辑距离
    23最大乘积子串
    22倒排索引简介
  • 原文地址:https://www.cnblogs.com/ruojisun/p/6219002.html
Copyright © 2011-2022 走看看