题解合集(NOIP2018赛前集训)

每天做的题的题解都扔上来,以后好复习

10.22

jzoj5919:
找出所有环,拿出左右端点,set维护r[i]表示以i作为左端点时右端点最右是多少,二分统计答案
jzoj5920:
先求出两个数组start,end.start[i]表示以i为开头的LIS,end[i]表示以i为结尾的LIS.一个结论:如果一个数存在于多个LIS中,那么它的排名是一样的,如果start[i] + end[i] == K + 1(K 为最长LIS长度),那么这个a[i]在LIS中.之后讨论一下,有主席树和离线树状数组两种方法,我比较蠢,写了主席树(不会离线 ).

10.23

jzoj5922:
结论:一个数列[l…r]及k,使a[i] += C i + k − l k C_{i+k-l}^k Ci+klk等价于使[l…r]{初值均为1}前缀和k次.
知道结论后就好做了,由于k的范围很小,可以分成k个序列来差分,从大的往小的做,每次差分完注意减去影响.
jzoj5923:
关于图的连通性的DP,一般分成三种情况.
连通情况+不连通情况==所有情况.
处理完就好做了

10.24

jzoj5924:
分块之后直接双端队列维护就好了
STL:deque是双端队列

10.25

jzoj5925:
注意一个结论,就是一个点的颜色最多只会改变两次.
所以可以考虑DP,设f[i]表示[1…i]变为同一种颜色的最小代价,预处理每个区间的Min和全部变为Min的Cost即可.注意为了保证有一个目标颜色,所以从后往前也做一遍.
n 3 n^3 n3是可以接受的
jzoj5926:
tmd比赛的时候竟然没想到.
把边权从小到大排序,然后对于一条边,它的贡献就是两个连通块之间符合条件的点对数,用启发式合并和权值线段树即可 l o g 2 log^2 log2做到.
注意离散化.

10.26

jzoj5928:
打表找规律可以发现总和是这个式子
∑ i = 1 n i ∗ 2 i − 1 ∗ ( 2 + 2 n ) \sum_{i=1}^{n}{i * 2^{i-1}} *(2+2^n) i=1ni2i1(2+2n)
其中 ∑ i = 1 n i ∗ 2 i − 1 = ∑ i = 1 n 2 i − 1 + ∑ i = 2 n 2 i − 1 + ∑ i = 3 n 2 i − 1 ⋯ \sum_{i=1}^{n}{i * 2^{i-1}} =\sum_{i=1}^{n}{2^{i-1}} + \sum_{i=2}^{n}{2^{i-1}} +\sum_{i=3}^{n}{2^{i-1}}\cdots i=1ni2i1=i=1n2i1+i=2n2i1+i=3n2i1
换下形式,最后搞出来这个
[ ( n − 1 ) ∗ 2 n + 1 ] ∗ ( 2 + 2 n ) [(n-1)*2^n+1]*(2+2^n) [(n1)2n+1](2+2n)
这可以用快速幂计算,最后乘下逆元即可
jzoj5930:
显然因为质因子间影响是独立的,所以考虑质因子分开来做.
先把所有 a i a_i ai拆成质因子形式,询问也一样.
现在考虑如何解决那个K的限制.
考虑子孙对祖先的影响,显然一个节点只会对它K级父亲以内有影响,于是对于一个节点,我们在它自己处打+标记,在K级父亲处打-标记.(结合dfs序想想)
现在考虑如何统计答案.
显然对于同一个质因子, q i q_i qi的指数和 a i a_i ai的指数我们需要取个min.
显然可以排序,从前往后做的时候用两个树状数组维护一下.(注意是在dfs序上做)
一个表示指数较小的,记录总和;一个表示指数较大的,记录个数.
注意每次之后由于操作可逆性,我们将操作逆回去清空树状数组.
由于质因子不超过 n ∗ 8 n*8 n8个,所以复杂度
O ( 8 ∗ n l o g n ) O(8 * nlogn) O(8nlogn)(常数略大)

10.27

jzoj5931:
递推,很好理解,直接扔式子
f i f_i fi表示 n = i n=i n=i时的 s u m sum sum
f i = f i − 1 + f i − 1 ∗ i ! − ( i − 1 ) ! ( i − 1 ) ! + i ! − ( i − 1 ) ! f_i=f_{i-1}+f_{i-1}*\frac{i! -(i-1)!}{(i-1)!}+i!-(i-1)! fi=fi1+fi1(i1)!i!(i1)!+i!(i1)!
O(n)预处理
jzoj5932:
Bitset牛逼
对于每个点宽搜,设 f [ i ] [ j ] f[i][j] f[i][j]表示第i个点j步以内能到达的点,用bitset搞.
没了
jzoj5933:
由于修改只在一边,倒着建主席树就没了.
我咋就没想过倒着建,cao.

10.29

jzoj5934:
网络流模板题,对于每个限制连一条INF,横纵坐标分别向S,T连1,最小割即可.
jzoj5935:
送分题,区间DP,考场上切了就不多说了.
jzoj5936:
https://blog.csdn.net/P_hillipe/article/details/83550433

10.30

jzoj5937:
贪心,考场上切了就不多说了.
jzoj5938:
首先两个块的形状肯定是阶梯型的
考虑极值的性质,显然两个块的极值的一端一定会包括最大和最小,所以二分出答案后,两个块的权值区间肯定在 [ m i . . m i + K ] [mi..mi+K] [mi..mi+K], [ m x − K . . m x ] [mx-K..mx] [mxK..mx]当中.
可以分4种情况贪心解决

11.01

jzoj5941:由于 b b b的值域只有 1 0 12 10^{12} 1012,所以直接预处理幂次即可,后续可以 O ( 1 ) O(1) O(1)计算.
jzoj5942:由于 a n d and and操作值最多变小 l o g log log次,维护一下每个区间的序列或去判断,每次暴力修改.对于 3 3 3操作可以拆开,发现维护平方和就好.
jzoj5943:有一个结论就是信标只会在叶子上,随便选一个度数大于 2 2 2的点为根,可以证明这个根一定不会放信标.随后贪心的做,一个节点设有 c c c个儿子,则必须在其中至少 c − 1 c-1 c1个儿子的子树中放信标.

11.02

jzoj5945:求均摊纸牌的方案数,求出每个点左边需要多少纸牌,右边需要多少纸牌,随后根据平均值分类讨论即可.
jzoj5946:
转化题意后变为找循环节,有个定理.
p p p是质数且 a k ≡ 1 ( m o d   p ) a^k \equiv 1(mod\ p) ak1(mod p),则 k ∣ p k | p kp.
然后这题就暴力枚举 k k k就好了.
jzoj5947:注意到逆序对个数肯定不超过 n 2 n^2 n2,所以每次操作暴力交换区间内的相邻逆序对,每次交换是 l o g log log的,所以复杂度是 O ( ( n 2 + m ) l o g n ) O((n^2+m)log_n) O((n2+m)logn)

11.03

jzoj5948:每个长度为 L L L的段的 s u m sum sum取最小值即是答案.
jzoj5396:转化题意后变成,找出一个最长的子序列使得序列平均值大于给定的 k k k.

11.04

jzoj5949:答案: n ∗ ( n − 1 ) 2 ∗ m \frac{n * (n - 1)}{2 *m} 2mn(n1)
jzoj5950:单调栈维护一个上凸壳即可,每次维护完后答案就是栈顶.
jzoj5951:不写了,吼难.

11.05

jzoj5952:设 b i b_i bi为从 1 1 1 i i i的异或和,预处理一个 f i f_i fi表示   b j &   i = =   i \ b_j \& \ i==\ i  bj& i== i的最左的 j j j.每次按位贪心,注意到若 b i b_i bi某一位为1,那么对答案贡献仅为1,若某一位为0,对答案的贡献就是0或2.用刚刚处理的 f f f数组维护计算即可.
jzoj5953:有定理,原点集重心肯定是对称中心.那些原本就关于对称中心的点先删去,若剩下的点 < = 2 <=2 <=2就肯定为 − 1 -1 1.注意到一条直线能包含所有 n n n个点,显然要出现 n / 2 n/2 n/2次,由于这样的直线不超过 n n n条,所以暴力做就可以.
jzoj5954:太长了不写了,去看Howarli的博客.原题[UOJ 351]新年的叶子.

你可能感兴趣的:(总结)