NOI春季测试前模拟赛题解

T312819 命题工作

直接容斥。

总方案 - 一题出现四次 - 一题出现三次 - 一题出现两次。

一题出现两次的情况略有不同,注意考虑周全。

复杂度 O(n)

code

T312891 图上棋局

有技巧的博弈论。

如果当前点的所有出边均为先手必胜,那么当前点为先手必败。

否则先手必胜。

于是我们可以建一个反向图,初始状态都设为 0,跑拓扑排序即可。

为什么不用记忆化呢?因为环的情况不好处理,而且卡时间。

复杂度 O(q(n+m))

code

T312903 点对

简单构造题。

假设有一个包含 n 个节点的简单环,那么符合要求的点对为 n(n1)2

所以我们考虑构造出一些环,相邻的环连一条边,容易证明一定能凑出 k

复杂度 O(1)

code

T312907 虫

简单树形 DP。

对于当前点 u,找到其所有儿子 v 中最大和次大的链,拼在一起。

注意当前点为根和只有一个儿子的情况。

复杂度 O(n)

code

T312820 信号干扰仪

每次找到距离最近的一对圆,加上他们相交的时间并删除。

反复操作直到没有圆。

复杂度 O(n3)

code

P1039 [NOIP2003 提高组] 侦探推理

大模拟。

枚举罪犯和日期,判断有多少人说谎。

复杂度 O(mp)

code

T310430 树

F1:树上差分。

把路径上的边 +1,覆盖 0 次、1 次、多次的情况分别讨论。

复杂度 O(nlogn)

code

F2:类似 DP。

考虑每一条边覆盖几次,实际上只有三种情况。

所以对于当前节点 u,我们考虑有几条路径跨越了 ufa 的边。

仔细一想,我们发现可以从子树转移。

首先我们将树分为三个部分。

每个点维护起点在红色区域,终点在绿色区域且 dfs 序最小和次小的路径。

再维护起点在红色区域,终点在蓝色区域且 dfs 序最大和次大的路径。

这样就可以由子树传递上来,然后处理一下只保留四条特殊路径即可。

复杂度 O(n)

code

P2593 [ZJOI2006]超级麻将

T225798 电阻电路

P7073 [CSP-J2020] 表达式

P3230 [HNOI2013] 比赛

T312843 排列

T313447 最小公倍数

T312821 花圃

T313449 珍珠项链

T313460 批改作业

T312916 连续子段和

T313666 平衡序列

T312914 编辑

T313555 拼板游戏

T315265 评测机

二分答案。

check 的时候用队列记录评测任务,然后从左到右贪心地评测即可。

如果超过时间 D,或者最后队列不为空,返回 false

复杂度 O(nlogn)

code

T315262 赛场

F1:决策单调性+分治优化 DP。

首先可以断环为链。

枚举起点 l,定义 fi,j 表示在 [l,i] 中开 j 扇门的最小代价。

然后就有了单次操作 O(n2m) 的 DP,即:

fi,j=mink=li(fk1,j1+sumk,i)

其中 sumi,j=t=ijat(ti),可以预处理。

观察发现,如果 fi,j 的最后一扇门在 w,那么对于所有 k<jfk,j 的最后一扇门在 w 左侧,反之同理。

于是可以枚举 lj,对于 fl,jfl+n1,j 分治处理。

具体可以定义 dfs(x,l,r,L,R) 表示当前有 x 扇门,f 第一维范围为 [l,r],决策范围为 [L,R]。每次计算出 mid=l+r2,暴力算出 fmid,x 的最优决策点 w,然后递归 dfs(x,l,mid1,L,w)dfs(x,mid+1,r,w,R)

复杂度 O(mn2logn)

code

F2:斜率优化DP。

待更。

T315264 公交线路

容易想到一条路径的两个端点必定为这棵无根树的叶子节点。

我们考虑 “剥洋葱”,每次找到最外层的叶子节点,答案加上 min(cnt,2m),其中 cnt 为叶子节点的个数。

然后拓扑排序去掉最外层,直到把整棵树都去除。

至于证明,仔细想想就明白了。

复杂度 O(n)

code

T315263 训练基地

考虑 40pts 的暴力。

x 为关键字从小到大排序,对于当前节点 u,找到前面所有纵坐标小于 u 的纵坐标的点集的最长下降序列,直接从后往前找即可。

考虑分治优化。

假设当前区间为 [l,r],计算出 mid=l+r2,递归处理 [l,mid][mid+1,r]

然后将 [l,r] 以纵坐标为关键字从小到大排序。

左边维护一个数组 vec1 记录下降序列,右边维护一个数组 vec2 记录上升序列。(本质上就是单调栈)

找到 vec2 中倒数第二个元素的纵坐标 y,并在 vec1 中二分,找到有多少个点的纵坐标大于 y 即可。

复杂度 O(nlog2n)

code

本文作者:HQJ2007

本文链接:https://www.cnblogs.com/HQJ2007/p/17561605.html

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   HQJ2007  阅读(17)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起