多校NOIP17

T1:

  要求中位数最大,可以想到根据权值进行排序

一个重要的结论是,中位数随x的增加单调不增,

于是考虑单调指针,依次贪心判断该中位数是否可行,

选取最大即可,那么问题就转化为求一段区间前k大,

根据时间建立主席树即可

T2:

  考虑首先想到的是Dijkstra等求解最短路的算法,

只需要将三角不等式变形为d[y] > d[x] << 1 | wgt[i]

  然而问题在于取模比较大小,首先若只包含乘

操作可以转化为log加运算比较大小,然而并不可行,

另一种思路为高精度,可以发现本题空间无法接受

  给出一种新的比较直接的思路,既然不等直接

比较大小,那么可以转化思路,如果能够保证d[x]

单调递增,那么可以直接避免比较的过程,于是考

虑转化最短路过程,根据题中最短路定义,能够想

到贪心,显然先选择0,后选择1,那么考虑Bfs,

假设队列中所有点按d单调递增排序,考虑如何保证

之后的点仍然单调,仍然为先选0后选1,然而存在

一个问题,若队列中存在d相同的点怎么办,显然

直接贪心会收到队列中位置与图连边的影响,那么

可以直接将所有d相同的点全部取出队列,全部处理

先入队0后入队1即可

T3:

  考虑总方案数显然为a^n,能够想到期望的转化

问题即求每个数值被选择的概率,也就是方案数,于是

考虑钦定选择i,显然的贪心策略为从小往大选,因此

i之前的所有数一定必选,又由于所选数数总和不超过m

因此可以进行dp,设f[i][j][k]为钦定最大值为j,选了i个

小于j的数,且数字总和不超过k

  也就是枚举最大值,选了多少个小于最大值的数,

以及数的总和的方案数,考虑剩余位置从大于i的数中

随便选即可

  对于f的求解背包或容斥皆可,考虑容斥出i个小于

j的数,枚举有多少大于j的数,奇加偶减即可,问题转化为

sigma x = m - k * j,考虑首先钦定这t个数大于等于1,两侧

同时加t * (j - 1)保证t个数大于等于j,考虑g定义为不大于k

也就是可以插0,于是组合数同时加1插板即可

T4:

  基本思路为钦定每个点的根节点判断同构方案数,

考虑首先处理树2自同构的方案数,枚举树2每个点为

根节点,问题在于处理树相同的情况,这里CQBZ巨佬

采用的树上Hash,考虑可以拓展一般的字符串哈希到

树上,哈希变量由单个字符变成了子树size,预处理

质数,字符集哈希即可。

  剩余只需要对于树1进行dp每个点为根节点与树2

匹配即可,子树合并枚举该节点子树的所有匹配即可

posted @ 2021-10-28 21:30  HZOI_LYM  阅读(26)  评论(0编辑  收藏  举报