BUPT训练随笔(round 2)
BUPT T2:
目前已掌握:ABCDEFGHIJK
A:有个长度为n的单调递增序列,其中有且只有一个数的个数是1<x<k,其他数均为k,求这个特殊的数。60次询问,n<=1e5
思路:首先必然需要知道k,我们可以通过二分得知第一个数有多少个,然后我们考虑找这个特殊的数。首先先查找k+1与2k+1是否相同,如果相同则说明第一个数是特殊数。否则我们可以二分这个特殊的数是第几个数,通过查询mid*k,mid*k+1判定目前是否出现过特殊的数
B:有n颗树,每棵树有高度,需要选择一些树使得树顶端在一条45度倾斜的直线上,记收益为相距最远的树的欧几里得距离减去中间被砍的树的高度,要求最大收益。
思路:队友写的0.0这题可以考虑扫描线做,我们用线段树维护区间加操作,维护区间内碰到这条扫描线的树的个数。然后统计答案即可注意到如果有一段收益为负则将收益设为0表示这段不取,否则可以一直添加入答案中(贪心)
C:n个点的树,每个点有红/黑/无色三种颜色,要求找出一个无色联通块使得删除该联通块后至少有一对红/黑点之间没有路径。求方案数。
思路:显然发现一个无色点是关键点当且仅当它有2颗子树,一颗含有红色,一颗含有黑色。然后我们要求的就是包含至少有一个关键点的无色联通块的数量。至少有一个不是很好做(其实也可以做),我们可以考虑完全不含关键点的联通块数量,相减即可。
D:已知n个实数x1,x2,x3....xn,要你设计p1x1+p2x2+.+pnxn=E,输出一个方案即可
思路:大的小的凑一凑!老送分了
E:网格里可以从(x,y)->(x+1,y+1/y/y-1),网格中2~n-1每个位置等概率会出现管道,管道的[a+1,b-1]可以通过,求(1,k/2)->(n,k/2)的方案数的期望n 1e9 k 50
思路:这题并不会,赛后补的。我们显然发现这应该像是个矩阵快速幂,我们不妨直接把管道的转移矩阵设为S,普通转移矩阵设为T,则vn=(v1*sumT^(i)*S*T^(n-i-1)),我们考虑设Hi=sum T(j-1)*S*(i-j-1),那么vn=v1*S*Hn-2*S,然后我们发现(奇数)Hn=Hn-1*T+T*Hn-1,(偶数)Hn=Hn/2*T^(n/2)+T^(n/2)*Hn/2,然后就可以过了(,可能是我太菜了.jpg
F:等边三角形,还有3边中点的圆(半径任意)的交。
思路:不会,赛后队友的写法很有趣,就直接暴力判断(x,y)是否在圆内,然后正方形拟合,精度可能太低了就过了.jpg
G:n个点按顺序向前面的点连边,要求所有点都处于一个联通块。求连边方案。
思路:完全就是读题的题,题目读完是人都会。
H:n点m条边,要求2i与2i-1不能在同一个集合,要求把n个点分成两个集合,且一个集合为覆盖集。
思路:2i不能和2i-1在一起,这2-sat裸题。考虑到数据范围nlog所以必须要用tarjan缩点。然后覆盖集的对立面就是独立集,所以求个独立集就好。建边就是套路了。
I:n个字符的字符串,A拿到的是全大写,B拿到的是全小写,问一个字符串是A变过来的还是B变过来的(一次变化是小写<->大写)
思路:啊这,模拟还有比这更简单的吗。
J:一个seti-BST的定义是,左儿子里所有节点都比这个节点权值小,右儿子所有节点都比这个节点权值大,而且右儿子是个seti-BST,求n个点seti-BST方案数
思路:很裸的题,想到n个点的有根树的方案数可以预处理出来,那么f[i]=sumf[j]*a[i-j]是个分治NTT模板题(我并不会写)
K:n个字符串,有"a""b""ab""ba",a与a靠在一起可以组合成一个a,要求拼接的字符串长度尽量短。
思路:老贪心送分了。没啥可说的