1 条题解

  • 2
    @ 2022-8-8 15:38:20

    您也可以点我,去博客园观看。

    我们可以看到出题人在卡常......

    题目传送门


    大体思路:

    正解很简单,爆搜肯定过不了。这里直接放标程,自己体会去吧。

    首先我们可以看到:

    (注:吕西安可多次拿走同一位置的棋子。)
    

    那就很显然了,我们只要让吕西安每次都拿走初始位置上的棋子,那他就和不存在一样!(吕西安:原来我就是个配角......)

    那么题目就转换为了:

    小明在第一分钟时会摆上一个方块。此后每分钟,小明都会在上次摆放的方块的四面(上下左右)八方(斜边)各摆放一个方块。小明想知道自己需要用多长时间才能摆满一个 n×m 的方框。
    

    嘿!不就是类似病毒扩散吗!答案就是初始位置距离四条边的最大值。

    换句话说,从初始位置扩散到距离初始位置最远的那条边所用的时长+1+1,就是答案!

    代码:

    #include<iostream>
    #include<cstring>
    #include<cstdio>
    #include<bits/stdc++.h>
    using namespace std;
    int main(){
        int n,m,f=0;
        int x;
        ios::sync_with_stdio(false); //加速,您也可以不使用 cin、cout,那样会快一些,不然会被卡常。
        cin>>n>>m;
        int ans=0;
        for(int i=1;i<=n;i++){
            for(int j=1;j<=m;j++){
                cin>>x;
                if(x==1){ //找到了初始位置。
                    ans=max(max(max(i,j),n-i+1),m-j+1); //求距离最远的那条边。
                    f=1;
                    break; //找到答案后直接结束。
                }
            }
            if(f==1) break;
        }
        cout<<ans<<endl;
        return 0;
    }
    

    总结:

    这只是道签到题而已......别被吕西安所诱惑!

    • 1

    信息

    ID
    254
    时间
    200ms
    内存
    5MiB
    难度
    8
    标签
    递交数
    38
    已通过
    5
    上传者