模拟测试59

Posted hz-rockstar

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了模拟测试59相关的知识,希望对你有一定的参考价值。

T1:

  翻转区间相当于位移,但是边界附近的点要特判。

  可以处理出最左侧和最右侧的对称轴,然后分类讨论每个数的位置,即可知道他能移动到的区间。

  用set进行bfs即可,相同的点不会被遍历两次。

  也可以线段树优化建边,注意优化建边跑双端队列bfs一定要把出边的权值设为1。

  时间复杂度$O(nlogn)$。

T2:
  将所有的数排序,从大到小枚举。

  每次扩展和枚举的数相同的行和列,这样扩展出的区间为矩形或L形。

  在同一个区间内数的上界限制相同,而互不影响。

  每个矩形或L形的方案数可以用容斥求出。

  先考虑矩形,设$f[i]$为有$i$行满足条件,每列都满足条件的方案数,矩形长宽分别为$a$和$b$,当前限制为s。

  则总方案数为$ans=\sum \limits_i=0^a (-1)^i+1f[i]$

    $f[i]=C_a^i(s^i*((s+1)^a-i-s^a-i))^b$

  将矩形扩展一下即为L形,设L形多出的与$a$和$b$的方向分别平行部分的长分别为$c$,$d$。

    $f[i]=C_a^i(s^i*((s+1)^a+c-i-s^a+c-i))^b*(s^i*s^a-i)^d$

  同样容斥,不同区间的方案数相乘即可。

  时间复杂度$O(nlogn)$

T3:

  每次坐的时候,若最长长度为奇数,直接坐在中间位置。  

  若为偶数,则中间的两个位置都有可能,并且两种情况关于中间对称。

  于是根据对称计算就行。

  时间复杂度$O(n^2logn)$

以上是关于模拟测试59的主要内容,如果未能解决你的问题,请参考以下文章

CSPS模拟测试59

单元测试检查数据库查询是不是正确——可以模拟啥?

[考试反思]1004csp-s模拟测试59:惊醒

C# - 单元测试,模拟?

CountDownLatch模拟高并发测试代码

用 Jest 模拟 Firebase 功能(单元测试)