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; }
总结:
没啥可说的,只是道签到题而已。要学会巧算,别被吕西安所诱惑!
后记:
如果你连这道签到题都做不出来,就是逊了啦~