Title

U226303 填满方框(加强版)

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

题目传送门


大体思路:

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

首先我们可以看到:

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

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

那么题目就转换为了:

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

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

换句话说,从初始位置扩散到距离初始位置最远的那条边所用的时长+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>>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;
}

总结:

没啥可说的,只是道签到题而已。要学会巧算,别被吕西安所诱惑!

后记:

如果你连这道签到题都做不出来,就是逊了啦~

posted @ 2022-07-11 10:07  Zilljy  阅读(15)  评论(1编辑  收藏  举报