联考test1009

写在前面的话

感觉比以往的比赛难多了。出题人卡高精度,不好评价,但是题目还是好题。

考试的时候开题顺序为 T1T3T4T2 ,感觉和题目的实际难度排序差不多。

实际得分 80+0+100+0=180 ,总体排名 rk29

今天发现外省的选手都很强大啊,之后的路很长。

题目或许需要保密,所以不给予题目描述。

T1

思路点拨

比较结论的一题,容易知道的是,在 1in 中, 不同的 f(i)O(n) 这个级别上。

我们可以预处理处每一个 f(i) 相同的连续段,这个是十分具有规律的,我们可以打表得出这个规律。

对于一组询问,我们可以暴力遍历这 n 个连续段,我们对于一个连续段 l,r ,我们希望求出有多少个非负整数 x 满足 lk+xmr ,每一组合法的 x 会产生 f(l) 的贡献。

利用不等式的知识可以得出,k 的下界是 lkm ,上界是 rkm ,所以单次询问可以做到 O(n)

期望得分 100 ,但是本题需要高精度或者 int128 ,所以只有 80

T2

emm,看来这是本场最困难的题目。不会。

T3

思路点拨

唯一场切的题。我们考虑弱化问题,使得 ai<L

这是一个经典的问题,我们将 a 从小到大排序之后,答案就是 i=1naii+1 。证明略。

我们可以将一个数拆分为两个部分,一部分是 0,1,...,aiaimodL1 ,二部分就是 aiaimodL,...,ai1 。我们发现,对于一个数,如果其存在一部分,那么这个一部分会长于全部的二部分。所以我们优先填一部分。假设我们在第二部分填了 j 个,那么第一部分(假设下标集合为 S )的贡献就是:

(xSaxL)(i=LjLn+1i)

这个式子我们理解一下,第一部分就是描述了每一个余数的选择,如果一个数为 x ,那么在它的第二部分有 xL 个完整的余数循环节 0,1,...,L1 。所以对于每一个余数有这么多种选择。第二部分是最好理解的,我们枚举了一个位置可以选择的余数。

我们将序列 {a} 依据 amodL 从小到大排序,之后考虑动态规划。

我们令 fi,j 表示我们考虑到了下标为 i 的元素,在这之前,我们选择了 j 个元素作为第一部分。

  • fi,j=fi1,j1×((aimodL)j+1) 。我们依照刚刚讲的 ai<L 的方式填了第一部分。

  • 如果一个数选择第二部分,我们并不好维护贡献的 i=LjLn+1i ,但是可以发现,这个在 j 一定的时候是一个定值,所以我们在动态规划的过程中只维护 i=LjLn+1i 。固然有 fi,j=fi1,j×aiL

最后因为我们的第二部分没有算上阶乘,所以答案应该带上:

j=1n(fn,j×k=LjLn+1k)

总体时间复杂度是 O(n2) 的。

T4

思路点拨

我们考虑将问题转化一下,我们有 n 个节点,点有点权 vi 。对于第 i 个节点,要么他向点权小于等于它本身的节点连 ai 及以上条边,可以获得 bi 的贡献;要么他想点权大于等于他本身的节点连 ai 及以上条边可以获得 ci 的贡献。

我们发现,按照我们转化的题意,我们可以获得一种思考方向,就是我们将全部的节点按照点权从小到大连边,这样我们题目要求中的连边就有了方向感。

我们假设全部节点的点权是不同的,那么我们可以设计出一种动态规划,我们令 fi,j,k 表示我们考虑到节点 i ,选择了 j 个节点向点权比他小的点连边,后面至多可以有 k 个节点向点权比他小的点连边。转移考虑刷表。

  • fi1,j,k+bi 可以转移到 fi,j+1,k(aiij1) 。我们将节点 i1 选择为连向比他小的点。

  • fi1,j,k+ci=fi,j,min{k1,niai} 。我们将节点 i 选择为连向比他大的点。

转移式相信比较好理解,因为比较形象。时间复杂度可以做到 O(n3)

但是这个算法不足以解决全部问题,因为这个算法建立与全部节点的点权不同的前提下。其实并没有改变很多,我们只需要将权值相等的节点一起考虑,内部再一次枚举有多少节点向比他大的连边就可以转移了。但是时间是 O(n4) 的。

转移时可以使用后缀 max 优化,所以做到 O(n3)

posted @   Diavolo-Kuang  阅读(34)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示