2017-6-8 提高组模拟赛

感觉有些简单的题还是要努力想一想不可以在场上颓废QwQ

T1 笔记 note

题目大意:可以将一列数中值为x的数改成y,使得相邻两数的差的绝对值的和最小,求最小的和。n<=100000

题解:考虑每一个x,然后把值为x两侧不等于x的数字放到一个数组里面排个序取中位数。注意到元素比较小所以可以桶排。但是如果每次都桶排扫一遍复杂度退化为O(nm)的复杂度。注意到算法瓶颈是“扫一遍数组”,所以我们可以考虑只有最后一次扫一遍数组。那么对于每一个和x相邻的数不光记录他的值还记录一个下标x表示他是x旁边的数。这样把所有的x都考虑一遍即可。这样最后扫一遍即可。由于每个数字只有两个相邻的元素所以复杂度是线性的。(当然桶排可以用快排代替,可以证明对于每一段排序复杂度小于等于对总序列排序)。然而天生代码大常数QwQ。。。

 

T2 brackets

题目大意:有k种括号每个位置是哪种左右括号的概率已知。求序列合法的概率。n<=100

题解:

令f表示加一对括号形成合法序列的概率,g表示两段拼起来的概率。这样为了避免AB|C和A|BC的重复计算,可以规定g只能从由f形成的状态转移过来。可以用什么奇怪的理论证明。

 

T3 castle

题目大意:求无向图最短路网生成树计数。n<=1000

题解:首先求无向图最短路网就变成了有向无环图生成树计数。发现如果按照拓扑序来考虑到了第k个点,前k-1个点形成了一个联通块,那么k的入边一定来自这个联通块。记k-1的联通块的生成树数量为ans[k-1],那么ans[k]=ans[k-1]*d[k]。其中d[k]表示k的入度。

这是因为无论你把k接在k-1个点中的哪一个生成树的哪一个点上,都会形成树。所以答案就是所有点的入度之积。特别的,我们认为源点S=1的入度是1。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值