日记
考试啊,也是根本做不出来。先看了T1,是道简单的树形dp(不会做法假了吧)。T2就直接给我创飞,只能打个 30 分暴力(正解似乎是dp?)。然后,也是头昏脑涨,便睡趴了十五分钟,然后再来想T2。想的实在是没有头绪,就来写日记,给脑子初始化一下,再去想了。今天这个考试,标题是C组,然而题目标题是B组。
表里不一的模拟赛链接 看不太懂的题解
T1:给你一个森林,然后让你求每颗树的直径和。
是个学过树形dp的人都会打吧。10min 就打出来。但是我去上厕所的时候,看见 yzp
调了半个小时多,不会又 RE 了吧
T2:定义一个子区间的价值是整个子区间里所有的数的 gcd 乘上子区间里所有数的和。
先想到想到了线段树维护区间和和区间 gcd ,然后 O(n2) 暴力,总时间复杂度 O(n2logn) 。然后过了 10min 又想到了 O(n2) 的做法,也算是一大进步,优化掉了一个 logn 。
T3:求众数出现次数大于区间长度的一半的子区间个数。
打一个 O(n3) 暴力,能拿 10 分(蚊子肉也是肉嘛)
T4:暴力都不想打(每次都这样)
算了,还是试试T4的暴力吧。
总结:还是 大菜特菜 ,还得练(还得练到什么时候去啊)
然后就考完了,反方向的rank4,退役得了。
然后,熊老师说发题解,然而并没有(皇帝的新题解),于是我就去做dp了,我的dp实在太菜了。
我什么时候能再场切一道蓝题呢?
也是改题。那个私人题解,给的是部分分题解也不说一声,害得我浪费了半个小时,在讲T2前极限改出来。
T1:场切不说。
T2:source
先说那个题解给的私人部分分做法:设值域的上界是 V ,gcd(l,r) 为 l 到 r 的区间 gcd ,则 gcd(1,r),gcd(2,r),gcd(3,r),...gcd(r,r) 至多有 logV 个取值。 枚举每一个右端点 r ,设在 r 的 logV 个取值里,有一个取值为 x ,则对于每一个 x ,二分查找最靠左的左端点 l 使得 gcd(l,r)=x。时间复杂度 O(n×logn×log2n) 。
再说正解:在那 logV 个 gcd 的取值里,我们发现对于每个取值,加一个之后,它就会变成它和 hi 的 gcd 。这样我们就可以 logV 更新每一个 gcd 。时间复杂度 O(nlogV)
T3&T4:没改,晚上再说
先玩了一会原神(当然是下课玩的,上课没有),然后看到方大三抽出林尼,欸这您受得了吗。
T4:source solution
这个题目解法用文字描述实在是太繁琐了(其实是我不想写,也不会写),于是把代码打在这里好了。
打完了它还 WA 了一次,死因:没开 long long
(虽然这也不是第一次)。
然后就只剩 20 分钟了,切点水题吧。