CYJian的水题大赛[第二弹] 题解
(由于今天晚上被爸妈拖到超市买开学要的东西去了..所以发题解的时间就推迟了这么久..)
为了更好的阅读体验,代码部分会在文末贴上云剪贴板的链接,不会放在题解部分浪费大家翻阅的时间(其实就是代码写得又丑又长..)
T1 JerryC Loves Driving
这道题乍一看好像是数论分块板子题。但是再仔细看一眼数据范围就会发现妥妥70分...
那怎么办呢??
首先需要对这个式子开个刀:
这个变化应该没有什么问题吧..毕竟如果
然后我们就考虑如何
首先我们可以发现,一段从0开始的连续整数除以另一个整数
这个应该没有什么问题吧..
所以我们就可以直接枚举
注意:不要所有的数开long long,常数太大会卡TLE..
(这里有两位大佬给出了
T2 Jerry Loves Lines
首先需要知道一个常识:两条直线相交后,这两条直线在交点右侧的大小关系就会改变.如果有多条直线计算排名,则会导致两条直线交换排名,且这两条直线在交点附近排名必然相邻.所以可以直接把这两条直线的一条排名+1,一条排名-1,这样就可以稳定过了..
这个应该算是常识吧..或者说很显然
然后对于这道题,我们就只要算出所有直线两两之间的交点并且按照
先将所有点按照最靠左的询问排好序,然后每经过一个交点就把直线的排名更新一下.处理询问的时候就直接用排名为
T3 Samcompu Loves Water
这道题就是一并查集板子题..
如果没有失效的跳转方式的话,我们可以直接把所有的跳转方式按照危险程度排个序,然后一个一个按照并查集的方式加边,方案数的话就直接每次拿要合并的联通块的size的乘积加上去就好了..至于答案,先离线按照时间排个序,在加边前如果危险程度大于时间就直接把当前的总方案数*2(因为A->B和B->A算两种答案)当成答案就好了.
加上失效的跳转方式怎么办呢??
出题人非常良心的强调了不同的
所以就可以把这些可能失效的跳转方式专门拿出来,处理一个询问时就先备份好之前的数组,然后暴力加上需要加上的边,记录答案后就直接恢复原数组就好了..
(多亏 @Sooke 大佬看得起,竟然打了LCT..%%%蒟蒻根本不会LCT..)
T4 Zrz_orz Loves Secondary Element
其实题目并不难,只是相当于做了两道题而已..
首先需要了解的一点是:我们最终需要回到1号点,所以每一条边肯定都会走至少2次,并且对于一棵树,一条边允许走两次的话存在一笔画的方案.所以我们直接把走的所需时间*2就好了.这样就不需要考虑回到1号点的问题了.
然后对于Subtask 0..
实际上就是Subtask 1的做法..
直接dfs暴力枚举和不和第
然后把上面的东西按照走的时间排个序,然后对于每一个询问选择最大的愉悦值就好了..
Subtask 2的话..
树形DP..
我们可以定义状态
这个转移方程应该比较显然吧..如果不太清楚直接看代码部分就好了..(其实只是懒而已..)
code
写的比较丑,希望大佬勿喷..
T1
T2
T3
T4