NOIP2023 T3 题解
显然要么所有\(f_i<g_i\),要么所有\(f_i>g_i\),下文仅讨论\(f_i<g_i\)。
\(1\)~\(2\) 写你喜欢的打表,期望得分\(10pts\)。
\(3\)~\(4\) 写你喜欢的暴力,期望得分\(20pts\)。
\(5\)~\(7\) 来个高级点的暴力。设\(f_{i,j}\)表示能否活到\((i,j)\)。若\(f_i\ge g_i\),\(f_{i,j}=false\),否则,\(f_{i,j}=f_{i-1,j}\) \(or\) \(f_{i,j-1}\) \(or\) \(f_{i-1,j-1}\)。想明白拓展的本质就好。复杂度\(O(nmq)\),期望得分\(35pts\)。
\(8\)~\(14\) 好开始解说。
考虑那个\(dp\)在干啥。设\(a_{i,j}=[f_i<g_j]\),问的是能否从\((1,1)\)走\(a=1\)的点到\((n,m)\)。特殊性质启发我们考虑第\(n\)行和第\(m\)列。显然,若\(x_{min}\ge y_{min}\),那么\(y_{min}\)这一列全部为\(0\),答案为\(false\)。同理,若\(x_{max}\ge y_{max}\),那么\(x_{max}\)这一行全部为\(0\),答案为\(false\)。否则,\(x_{min}\)和\(y_{max}\),即第\(n\)行和第\(m\)列都为\(1\),那么只要能到达第\(n-1\)行或第\(m-1\)列就能到\((n,m)\)。看一下子问题\((n,m)\),那\(min,max\)都要在\(1->n-1\)和\(1->m-1\)内取。若\(x_{min}\ge y_{min}\)和\(x_{max}\ge y_{max}\)同时满足,那么返回\(false\)。若\(x_{min}<y_{min}\),那就看子问题\((x_{min},m)\),否则看子问题\((n,y_{max})\)。一直递归,直到被\(return \space false\),或缩小到\(x=1\) \(or\) \(y=1\),就\(return\) \(true\)。预处理前缀\(min,max\),复杂度\(O(q(n+m))\),期望得分\(70pts\)。
为什么是对的呢?显然若判出来是\(true\),则答案一定为\(true\)。怕的是判出来为\(false\),实际是\(true\)。但\(return\) \(false\)的唯一条件是同时满足,所以肯定被\(0\)封死了,所以这种情况不会出现,故做法正确。
\(15\)~\(20\) 垃圾时间到。找到\(x_{min}\)和\(y_{max}\)的位置。先用或条件判一下,然后看\((1,1)->(x_{min},y_{max})\space and \space (x_{min},y_{max})->(n,m)\)。用上述方法解决即可。复杂度\(O(q(n+m))\),期望得分\(100pts\)。
最后来一句,相信\(NOIP\),实力到了,就一定能考出来!
浙公网安备 33010602011771号