17/10/20题目泛做

来源:互联网 发布:阿里云最便宜的服务器 编辑:程序博客网 时间:2024/06/05 23:51

终于停课了……于是来补一发题解

Hzwers模拟T1:逗比三角形

题意:给若干个三角形的三边长然后问如何把这些三角形放在一个宽度L高度无限的矩形框里面使得这些三角形有一条边紧贴矩形底边的同时在矩形框里面覆盖的面积最大,并算出这个面积
分析:这非常结论题……显然我们把三角形里面最短的那条边放在下面是最优的。然后我们考虑把三角形切成宽为d的矩形,那么很显然我们会选高度前[Ld]个矩形拼接出来。然后我们考虑最后一个选的矩形高度为H,那么我们会发现最优方案里所有三角形相交高度都是H,就是说在这个高度以下的区域都被填满了,其上是一些不会相交的三角形,然后二分一下就好了
至于为什么相交高度会是H,只要我们注意到比H高的三角形都可以随意移动就可以了,而且很显然移动后这样会最好(重叠部分最小)
用了海伦公式先推面积再算高……
代码:(未调试)

Hzwers模拟T2:普通三角形

题意:给一个N×M的网格,问其中格点可以构出多少三角形
分析:水题,而且是原题,非常好做
我们只要选三点出来再去掉三点共线的情况就好了
共线中只有斜着共线的比较特殊。我们只需要参照bzoj2190仪仗队那题的做法,我们只需要利用最大公约数求一下一个向量里面重复了多少次然后直接平移乘一下就好了
代码:http://paste.ubuntu.com/25782606/

Hzwers模拟T3:忧桑三角形

题意:维护一棵静态树,支持两种操作,改点权,还有问一条路径上是否存在三个点,使得对其点权abc,满足a+b>c,其中点权在int范围内
分析:我们尝试构造一个点权数列,使得两两点不满足上面的条件,也即令a+bc
观察到这和斐波那契很像,事实上要使其最长,其边界情况也就是斐波那契(就是取等号的时候)
而点权只在int范围内,所以最多大概50个点以上就必定是Y,如果没这么多点就暴力判断,可以枚举掉也可以把点拉出来排个序然后比较相邻三个
并不用打LCA,暴力跳即可(发现已经跳了超过50了就直接可以结束了)

Tsinsen D3521:最长双回文串

题意:给一个字符串问里面最长的双回文串有多长,这里双回文串就是两个相邻的回文串拼在一起
分析:不会打回文自动机/回文树于是用Manacher做了
跑一遍马拉车然后对每个’#’号我们看它能向左向右各延伸多长的回文串
然后每个点找回文半径之后先更新一遍塔两端的点
接着由回文半径的性质再扫一遍更新就可以辣
话说这里的马拉车好短啊orz:http://www.cnblogs.com/CQzhangyu/p/6802572.html

Tsinsen D3523:比特集合

题意:维护一个集合,支持插入删除元素 还有全部增加一个值 以及查询有多少个数某一位是1,元素大小在int范围内
分析:非常好做 我们考虑下查询的时候怎么查能够把这道题目转成熟悉的区间查询
然后数据范围这么小我们可以考虑二进制分组,在mod 2k+1意义下我们发现第k位相同的都聚在了一起,那么就很容易做辣
16个树状数组维护fk,i表示在mod 2k+1意义下有多少个数的值是i,然后插入删除都是单点修改,全部增加一个值就是区间移位,记下循环移了多少,查询就是区间查询
复杂度是O(nk2),BIT常数小跑得飞快

原创粉丝点击