首页 > 其他分享 >JOISC 2019 记录

JOISC 2019 记录

时间:2024-02-06 19:44:57浏览次数:26  
标签:off log 记录 复杂度 tog JOISC 2019 操作 可以

Day1 T1 Examination

三维数点板子题,直接 cdq分治+树状数组,时间复杂度 \(O(n\log^2n)\)。

Day1 T2 Meetings

对于一个大小为 \(n\) 的树,我们可以在 \(n-2\) 的询问中得到某一条我们选定的链 \((x,y)\) 上的所有节点的集合 \(S_0\),以及在断掉这条链之后,得到的若干连通块集合 \(S_1,S_2,\dots,S_{S_0}\),这样我们就可以通过 \(O(n)\) 次询问将查询整个树分成查询 \(|S_0|+1\) 个树,由于每一个点的度数很小,所以考虑直接每一次随机选取 \((x,y)\),可以通过。

Day1 T3 Naan

考虑先得到每一个人单独均分这块馕的 \(N-1\) 个位置,然后按照 \(i\) 从小到大,贪心地让第 \(i\) 个分界点最小且还没有拿到过馕的人分到按照他的分界点分到馕,由于这个人不是第 \(i-1\) 个分界点最小的人,所以它分到的这一块一定完全包含了他单独分的时候的一块,也就是有了至少独吞时的 \(\frac{1}{N}\)。

时间复杂度 \(O(N^2)\)。

Day2 T1 Two Antennas

考虑扫描线 \(R\),所有可能做出贡献的 \(|H_x-H_y|(x<y)\) 都记录在 \(x\) 上。
由于我们要计算 \(\max|H_x-H_y|\),等价于求 \(\max(H_x-H_y,H_y-H_x)\),所以可以做两次直接去掉绝对值。

我们只考虑 \(H_x-H_y\) 的情况。
考虑到 \(x\) 向后做出贡献的是一段区间,而 \(y\) 向前做出贡献的也是一段区间。所以可以使用线段树维护 \(\max val_x\),其中 \(val_x=\begin{cases}H_x,&y\in[x+A_i,x+B_i]\\-\infty,&y\notin[x+A_i,x+B_i]\end{cases}\),每一次增大 \(y\) 的时候修改变化的 \(x\) 即可,总共只需修改 \(O(n)\) 次,而每一次让 \(y\) 对 \([y-B_y,y-A_y]\) 这段区间为 \(-H_y\) 打上懒标记,表示其对这一段区间可以做贡献,实时维护出现过的最大的 \(val_x-H_y\) 即可,时间复杂度 \(O(n\log n)\)。

Day2 T2 Two Dishes

由于不能停下来休息,所以每一个步骤的限制都可以抽象成:如果在完成某道菜第 \(i\) 个步骤之前另一道菜的进度 \(\le a\) 就会对答案做出 \(b\) 的贡献。

整个做菜的过程是一条折线,会做出贡献的就是经过了某一条平行于坐标轴的线段,通过讨论全部转成平行于纵轴的线段,扫描线掉横轴,维护另一维,发现由于修改可能出现的不同的转移只能是 \([0,p]\to [p+1,+\infty)\),可以直接使用线段树维护。

时间复杂度 \(O(n\log n)\)。

Day2 T3 Two Transportations

这是一个双人 Dijkstra 的过程,两个人都按照自己知道的边来维护最短路,比较两个人的下一个转移点,选择其中较小的进行转移。考虑到一个合法的转移必然与上一个转移的权值之差 \(\le max(C,D)\le 500\),所以每人只需要 \(\left\lceil\log_2500\right\rceil=9\) 传输信息即可。

但是对于需要用对方的转移点转移的一方,他不知道这个点具体在哪里,所以还需要 \(\left\lceil\log_2N\right\rceil=11\) 位来传输这个点的信息,单次总共需要 \(9+9+11=29\) 位来传输信息,总用有 \(N\) 次转移,总共需要 \(29N\) 次传输,刚好满足条件。

Day3 T1 Designated Cities

\(E=1\) 时,可以之间换根得到每一个点的答案 \(w_i\)。
\(E=2\) 时,如果选择两个点 \(x,y\),答案为 \(\dfrac{w_x+w_y+dis(x,y)}{2}\),其中 \(dis(x,y)\) 为路径上每条边的两个权值的和的和。
\(E>2\) 时,可以证明存在最优解是在 \(E-1\) 的起初上再选择一个点,也就是再覆盖一条某个方向的链,这是一个比较经典的贪心,具体的,将 \(E=2\) 是选择的链缩成一个点,然后将树按照权值和进行长链剖分,每一次选择最长的长链即可。

时间复杂度 \(O(n\log n)\)。

Day3 T2 Lamps

由于 on/off 操作会直接区间覆盖,所以可以通过调整将最优解变成先执行所有的 on/off 操作,在执行 tog 操作。
tog 是反转,所以存在最优解使得 tog 操作的区间不交。

如果出现相交的 on/off 操作,它们必然是包含关系,同样可以转成一个 on/off 和若干个 tog 操作,这样没有增加操作次数。由此所有的 on/off 操作也不交了,由此我们可以直接 DP \(f_{i,0/1,0/1}\) 表示处理了前 \(i\) 位,当前第 \(i\) 位是否有 on/off 操作,是否有 tog 操作的最小次数,时间复杂度 \(O(n)\)。

Day3 T3 Bitaro, who Leaps through Time

通过调整可知,存在最优解只有在不得不时间回溯的时候才时间回溯。同时我们将坐标系偏移一位,使得所有向左右移动一格不改变时间。

此时,可以通过分类讨论得到经过一个区间的方案可能为:有一个空区间 \([L,R]\) 可以之间经过;或从 \(L\) 进入,从 \(R\) 离开,中间消耗 \(k\) 次回溯。

这个信息的合并是可以分类讨论 \(O(1)\) 得到的,使用线段树维护,时间复杂度 \(O(n\log n)\)。

Day4 T1 Cake 3

发现对于一个选择的蛋糕集合 \(S\) 来说,答案为 \(\sum\limits_{i\in S}V_i-2(\max\limits_{i\in S}C_i-\min\limits_{i\in S}C_i)\)。

不妨按照 \(C\) 将所有的蛋糕排序,我们钦定后面的极差 \(C_r-C_l\) 之后,相当于要在 \([l,r]\) 中选择前 \(m\) 大的蛋糕,对于单独的 \(l,r\),求出答案 \(f_{l,r}\) 可以使用主席树做到 \(O(\log n)\)。

记 \(g_r=\operatorname{argmax}\limits_{l\le r}f_{l,r}\),发现 \(g_r\) 不减,有决策单调性,所以可以直接通过分治得到所有的 \(g_r\),时间复杂度 \(O(n\log^2n)\)。

Day4 T2 Mergers

如果存在可分裂的 X 组和 Y 组,其必然对应一条边分割成的两个连通块,我们称使得其可分裂的边为可分裂边

每一种颜色构成的虚树对应原树上的所有边都不是可分裂边,我们可以将其两端的点缩在一起,这样我们最终会得到一棵只有可分裂边的树。

如果这个树有至少两个节点,及其叶子节点数量(无根树)为 \(lf\),则最终答案为 \(\left\lfloor\dfrac{lf+1}{2}\right\rfloor\)。

每个虚树可以被剥离称 \(siz\) 条链,使用并查集维护点集,时间复杂度 \(O(n\log n)\)。

Day4 T3 Minerals

我们扫一遍将所有的点分成两组,其中每种矿物每一组各一个,具体方式为依次插入,如果总矿物量变化就放到第一组,否则放到第二组。

然后,我们对于第一组,将前 \(Bn\) 和后 \((1-B)n\) 个矿物的状态设置成不一样的,然后依次修改第二组中的矿物存在状态,如果其对应的第一组不在集合内,则答案会变化,这样我们可以通过 \((1+B)n\) 此操作将所有的矿物分成 \(Bn\) 和 \((1-B)n\) 两组,在 \(B=0.5\) 的时候,操作次数为 \(1.5n\log_2n+2n\approx 1078787\) 次,无法通过,发现单层的操作是 \((1+B)n\) 的,所以可以考虑些微的减小 \(B\),发现操作次数更优,同时可以加入一些剪枝,就可以卡过去了。

标签:off,log,记录,复杂度,tog,JOISC,2019,操作,可以
From: https://www.cnblogs.com/Xun-Xiaoyao/p/18009936

相关文章

  • Oracle Version 19.3.0.0.0 On Windows Hyper-V Server 2019 Try In_Memory
    SQL*Plus:Release19.0.0.0.0-ProductiononTueFeb608:31:432024Version19.3.0.0.0Copyright(c)1982,2019,Oracle. Allrightsreserved.Enteruser-name:/assysdbaConnectedto:OracleDatabase19cStandardEdition2Release19.0.0.0.0-Produc......
  • 记录一次Electron程序打包自定义安装包
    首先下载nsNiuNiu打包程序下面就是下载之后解压的文件夹内容,注明了主要文件/文件夹的用途将使用electron-builder打包的文件内容拷贝到FilesToInstall,也就是文件夹下面的内容拷贝过去修改.\SetupScripts\nim\nim_setup.nsi中的内容,这个文件是nsis的打包主文件,在其中设......
  • Windows Server 2019 搭建用户自助修改密码
    一、安装Web服务器(iis)和远程桌面服务1.运行添加角色和功能向导2.选择服务器角色,Web服务器(IIS)和远程桌面服务3.后续全部默认下一步4.勾选“远程桌面Web访问”点击下一步5、点击安装,等待安装完毕6.打开IIS管理页面7.修改‘PasswordChangeEnabled’的值为“trus”8.返回“Pages”主页,......
  • idea maven启动项目报错记录
    1.Failedtoexecutegoalorg.codehaus.mojo:tomcat-maven-plugin:1.1:redeploy(default-cli)onprojecth更改项目配置中的commandline栏:tomcat7:run-Dmaven.tomcat.port=8087-fpom.xml2.tomcat-maven-plugin:1.1:run(default-cli)onprojectBidNXJC:Couldnots......
  • [GUET-CTF2019]虚假的压缩包
    [GUET-CTF2019]虚假的压缩包附件里面有两个压缩包虚假的压缩包是伪加密,修改加密位后即可打开里面是一个txt文件,给了一道题目根据给出的提示,判断是普通的RSA,通过脚本解出为5importgmpy2p=gmpy2.mpz(3)q=gmpy2.mpz(11)e=gmpy2.mpz(3)l=(p-1)*(q-1)d=gmpy2.invert(e,l......
  • 目录遍历(建立目录树,记录目录属性)仅适用于小样本
    directory.h#pragmaonce#include<windows.h>#include<tchar.h>#include<stdio.h>#include<tchar.h>#include<string>#include<stack>#include<codecvt>#include<vector>#defineFILE_NOT_IN_NODE-1classDirTreeNode{p......
  • 2024年重启人生要做的100件事,记录待办清单并打卡完成
    新年伊始,很多人都怀揣着改变自己、追求更美好生活的期望,渴望在2024年做一些有意义的事情,为自己的人生注入新的活力。为了帮助大家更好地实现这些目标,小编整理了一份2024年重启人生要做的100件事待办清单,涵盖了健康美丽、自我提升、享受生活、诗与远方、奖励自己等五个方面。这些......
  • 在我的VS2019中重新配置2017项目生成的google test 项目
    原来的项目是其他版本的VS配置的,自己下载下来时候,本机也没有装GoogleTest所以用不起。如果重建项目在一个个引入工程代码太麻烦(文件多),所以我就想着有没有什么办法快捷配置,不用重建工程以下是我的一个配置方法,供大家交流学习:1.首先你本机要安装上GoogleTest,安装方法自查;2.如......
  • (python)做题记录||2024.2.4||题目是codewars的【 All Balanced Parentheses】
    题目链接:https://www.codewars.com/kata/5426d7a2c2c7784365000783/python我的解决方案:defbalanced_parens(n):#Yourcodehere!used_l=[Falseforiinrange(n)]used_r=[Falseforiinrange(n)]answers=[]defprocess(answer):iflen(a......
  • Erlang 学习之第四天 . 列表,文件,原子,映射,元组,记录
    Erlang列表列表属于数据类型里面的集合, 列表是用于存储数据项集合的结构。在Erlang中,列表是通过将值括在方括号[]中来创建的。实例:  start() ->    Lst1 = [1,2,3],    io:fwrite("~w~n",[Lst1]).输出结果是:[123]以下是列表的方法说明:all: ......