闲扯
怎么感觉概率期望每次都不会做啊。。
还有 $T3$ 题意理解错了,没想到最后一个套娃的 $in$ 也要算进去,结果暴力都打挂了。。
题面
见$ftp$
$T1$
Solution
考虑计算所有的坏排列,然后用总方案数减去坏排列的个数即可得到好排列的个数。
因为坏排列的定义是有一个关键字单调不降,而我们有两个关键字,可以考虑容斥。
分别计算出每一个关键字单调不降时的方案数,再减去两个关键字都单调不降的方案数即可。
Code
1 |
|
$T2$
Solution
$30\ pts$ :暴力即可。
$60\ pts$ :我不会。
$100\ pts$ :题解写的比我好。
Code
没有
$T3$
Solution
假如我们将套娃 $a$ 套进套娃 $b$ 中,那么我们得到的空气的体积(???)即为 $in_b-out_a$ 。
$a$ 能作为最外层的条件是 $\forall i\in [1,n],out_a>in_i$ 。
$a$ 能作为最内层的条件是 $\forall i\in [1,n],in_a<out_i$ 。(否则将满足条件的 $i$ 加入一定会使答案更优)
将每一个 $a$ 能包含 $b$ ,我们可以将其看做一条由 $a$ 连向 $b$ 的边权为 $in_a-out_b$ 的边。
又因为要空气的体积之和最小,那么我们就相当于是要求我们得到的图的最短路的数量。
但是我们直接连边的话,需要 $n^2$ 扫描一遍,时间上无法接受,所以我们需要优化。
方法一:线段树优化连边
我们先按照 $out$ 排序,那么每一个点都会向一段区间连边。这是我们可以像线段树一样,将这一个区间分为 $\log$ 段,然后再连边。这样我们就可以做到 $O(n\log n)$ 连边了。
方法二:DP
考虑我们最短路的松弛操作: $dis_u=min(dis_v+in_u-out_v)$ 。
将 $in_u$ 提出,那么我们需要维护的就是所有满足条件的点中, $dis_v-out_v$ 的最小值。
我们先将所有点按照 $out$ 从小到大排序,那么我们对每一个点,我们需要查询的都是一个前缀。
我们注意到一个事实,对于任意一个点 ,满足 $out>in$ 。
那么我们按照 $in$ 从小到大的顺序来处理,合法的,可以用来更新的区间,一定是不会变短的,这样我们就只需要维护一个最小值即可。
至于最短路计数问题,大家应该都会,就不再多说了。(不会的同学可以自行百度搜索)。
Code
1 |
|
总结
还是太菜了特别是语文,甚至没想到最短路计数虽然最开始想到最那么一下,线段树连边这些操作也都还没学过,要更加努力才行。