07-29 NOIP模拟测试10

A. 辣鸡(ljh)

看到这题时有点虚,没选化学啊喂。

一开始一直在想对角线有没有什么性质,然后进死胡同了,去看T2。

回来后,想先qj一下点1,然后发现了块内的贡献可以直接算,一开始我用对角线推的,所以有下面这个鬼畜柿子

ans+=1ll*(1ll*(mi-1)*(mi-2)+(mi-1)*(abs(x-y)+1))*2;

后来发现这种算法十分nc,其实有 $ans_{块内}= sumlimits_{i=1}^{n} 2 imes (x2_i-x1_i) imes (y2_i-y1_i)$ ...

接着开始考虑怎么统计各个块之间的,看到N的范围,这板比不能$ Theta(n^2) $

所以一直在想 $Theta (nlogn)$ 的log哪来的,那么就想用些数据结构什么的来维护边界信息,还有离散化什么的emmm。

然而正解就是大暴力$ Theta(n^2) $,但其实是不到的,因为有一个显然而有效的剪枝和极其水的数据(过于分散的块)

我们对所有块按x1为第一关键字,y1为第二关键字排序,然后我们规定每次算i和i之后的块,这样保证了不重不漏

对于边界可以先算正对的部分,就是 $2 imes (接触线长-1) imes (2-1 )= 2 imes (接触线长-1)$,然后对多出且有贡献的两端缝缝补补。

剪枝:当i的x2+1够不到j的x1时,后面的j不可能对i有贡献,break掉

B. 模板(ac)

测试点分治:

1~6 节点套set,不断向上找father,在其路径的所有点上加入c,用siz判断即可。$ Theta (nmlogm) $

7~14 发现没有容量限制,所以就变成了《雨天的尾巴》。注意毒瘤出题人,c有负数,要离散化。

正解:DSU on tree

就是树上启发式合并,说白了就是每次更新把小的怼到大的里。

然后我们要给 大 小 一个定义,类似树链剖分,我们区分轻重儿子。

对于每个节点u,每次更新我们保留其重儿子的线段树,然后暴力把轻儿子的贡献加到线段树里。

在u上传给fa时若u不是fa的重儿子,就用懒标记清空线段树(注意不能用memset,复杂度退化)

复杂度证明在蓝链里。

C. 大佬(kat)

看到期望就把我唬住了,虽然看出是求方案的套路也没去推,难度评估错误。

一开始我想对于一种方案,在i移动的时候是有k天的制约的,就是有k-1天是不变的,所以要把k天的状态留下来。

然后充分不自信就打了个暴力跑了,也没有推出那个二位的dp。

然而我们换个角度看,其实对于每一个k题,把每种n题的情况按k题拆开并打乱,发现k长是可以独立计算的,总共n-k+1天的贡献是相同的。

所以有 $ ans= (n-k+1) imes frac {sumlimits_{i=1}^{m} wt[i] imes (i^k-(i-1)^k)} {m^k} $

$ (i^k-(i-1)^k $ 是k个数最大值为i的方案数

原文地址:https://www.cnblogs.com/hzoi-yzh/p/11267554.html