其他分享
首页 > 其他分享> > 2022 训练实录

2022 训练实录

作者:互联网

22-06-24

NOIO2020 #2 游戏

好久没搞 OI 真的蠢了。

恰好立刻转至少,所以设 \(f(x)\) 为钦定 \(x\) 对非平局回合的情况,\(g(x)\) 为恰好 \(x\) 对非平局回合的情况。那么:

\[f(x)=\sum^m_{i=x}\binom i n g(i) \]

应用二项式反演有:

\[g(x)=\sum^m_{i=x}(-1)^{i-x}\binom i n f(i) \]

剩下的问题就是求出 \(f(x)\),套路的,设 \(f_{u,i}\) 表示在以 \(u\) 为根的子树内已经选出 \(i\) 对的方案数,树形背包转移即可,记得考虑选 \(u\) 的方案。

时间复杂度 \(O(n^2)\),评价:Common。Link

APIO2022 排列

优质题,很可惜不懂正解。

考虑几个乱搞,第一个是直接丢不相交的若干个单调递增序列上去,但是似乎不怎么优秀,第二个是考虑二进制拆分,考虑添加进来的丢前面还是丢后面,似乎可以有 \(90+\)。

考虑优化第二种做法,或者说,我们继续乱搞。首先将这个做法进行劣化,比如说我们考虑每一次添加都使现在的上升子序列增加的尽可能多但是不要让他爆掉 \(k\),可以考虑利用 DP,\(\displaystyle f_i=1+\sum_{a_j<a_i} f_j\),暴力维护这个 DP。

这个做法也足够优秀,但是仍然没有满分潜质,考虑随机化,因为每一步如果都拉满反而容易达不到效果,随机地看需不需要随机地取一个更劣的结果就行了。

启示:一个做法烂记得别抛弃它,万一搞了个随机化就莫名其妙过了呢。

评价:Great。Link

APIO2022 游戏

牛逼题,大概自己研究了 1h,然后看题解理解了 1h。

显然的是,考虑维护一个 \(pre_i\) 表示最大的可以来的传送器,\(suf_i\) 表示最小的可以到的传送器,当一个非特殊点的 \(pre_i\ge suf_i\) 时,成环。暴力地进行搜索可以在 \(O((n+m)k)\) 的时间复杂度内解决问题,获得 \(60\text{pts}\),想到这里就想不动了。

考虑优化,这里很难想到的是将 \((pre_u,suf_u)\) 看成一个区间,同时注意到不用实时维护 \(pre_i,suf_i\) 而是只需判断。考虑一条新边 \((u,v)\),提取出 \(u,v\) 分别对应的区间,根据这两个关系讨论:

上述的递归指,暴力扫出所有与它有边的点进行 extend。

启示:注意一些东西不需要实时维护的就不要实时维护,类似于搞一个懒标记会更好。

时间复杂度:势能分析可得为 \(O((n+m)\log k)\),评价:Epic。Link

22-06-25

SNOI2017 炸弹

极其显然的有一个线段树优化建图的大复杂算法,很明显我不想写,不过考场上可能就开冲了,时间复杂度 \(O(n\log n)\),期望得分 \(100\) 分,但是很难写,爪仑还在写!!!1。

有一个更为优秀的一个单调栈做法,虽然实际上较为隐性:

考虑先求出单独向左炸炸的最远是 \(L_i\),这里同时用向左的炸弹反向炸回可能炸出的半径 \(r_{L_i}-(x_i-x_{L_i})\) 更新 \(r_i\),这是一个类似单调栈的过程,线性完成:

FOR(i,2,n) while(L[i]>1&&x[i]-x[L[i]-1]<=r[i]) {
    r[i]=max(r[i],r[L[i]-1]-(x[i]-x[L[i]-1]));
    L[i]=L[L[i]-1];
}

接下来考虑 \(R_i\) 的求出,注意这里可能存在右边炸左边的情况,同时左边炸右边已经在上面考虑:

ROF(i,n-1,1) while(R[i]<n&&x[R[i]+1]-x[i]<=r[i]) {
    L[i]=min(L[i],L[R[i]+1]);
    R[i]=R[R[i]+1];
}

由此,问题在 \(O(n)\) 的时间复杂度内完成,评价:Great。

启示:对于一道题目需要有所取舍。Link

SNOI2020 水池

纯纯的码农题,我还没写,先鸽一会。

一个一个操作来分析:

可持久化就可持久化线段树就行了。

时间复杂度 \(O(n\log n)\),评价:Trash。

坑点:修改操作二的时候注意依赖顺序。

启示:想清楚再搞。Link

标签:pre,suf,训练,复杂度,实录,Link,2022,区间,考虑
来源: https://www.cnblogs.com/cnyzz/p/16409787.html