ISIJ2020 不知道算不算游记

由于 CSP 的暴力分太高,我来了这里。
转发自 PKUWC 2020 游记

Day -53

要是不是别人说我进了,我还真没注意到。

居然混进了代表队 1,当然现在的水平远远没有代表队 1 的水平了。

为啥 zjr 没报名啊,队爷是他才对啊(

Day -45(模拟赛 1)

开场先把 T1,T2 码了。

然后低智商选手的事实就暴露出来了。

全世界都会 T3,自闭了。(我也不知道我会不会,但最后也没调出来)

upd:为什么有人用三分过了 T3,我就得挂,是不是我太菜了 /kk(弄得我以为三分是假的

后来我想的是个枚举中位数,然后做个两个分段一次函数的和,然后求最值,然而细节巨多,就暴毙了……

upd2:我把一个 [-2e9,2e9] 的数减了一个 [-2e9,2e9] 的数,成功爆 int 了。这么恶心的吗……

upd3:T4 的计分修了,勉强卡上了 300 分,然而还是丢脸 /dk

upd4:26 个人打了,我 rk10,308 分,果然是远远不到一队水平了。

这里放个简要题解(没有题意,别想了)

T1:简单贪心,三个数都尽可能靠近 \(\frac{n}{3}\) 即可。

T2:简单数位 dp,\(f_{i,j,0/1}\) 表示填了前 \(i\) 位,上一个填了 \(j\),目前这个数是否顶到上界。

T3:

比较长,折起来了

\(a\) 的前两个数为 \(x,y\),那么是 \(x,y,y-x,-x,-y,x-y\) 的六个一循环。把模 6 为 0,4,5 的 \(i\)\(b_i\) 取反,就可以看成是 \(x,y,y-x\) 这样循环。
贡献大概可以写成 \(\sum |a_i-x|+\sum |b_i-y|+\sum |c_i-(y-x)|=\sum |a_i-x|+\sum |b_i-y|+\sum |(c_i+x)-y|\).
假如我们枚举了 \(x\),那么 \(y\) 的最优值是个小学数学。对这些数排序可以做到预处理 \(O(n\log n)\),单次只需要归并的 \(O(n)\)
发现这个关于 \(x\) 是凸的,三分即可。
顺便证一下凸性:
首先,当 \(x\) 增大时,大于 \(x\)\(a_i\) 的个数变多,所以这一块关于 \(x\) 斜率递增。
第二部分可以看成所有 \(c\) 向右不断平移,所以 \(b_i\)\(c_i+x\) 的中位数会不断变大,同时大于中位数的 \(c_i+x\) 的个数会变多。这一块的斜率关于 \(x\) 也递增。
所以整个关于 \(x\) 的斜率递增。

T4:

比较长,折起来了

首先有个显然的 \(O(na^2)\) 的 dp 做法。
\(f_i\) 表示目前的体积是 \(i\),只考虑体积填到 \(i\) 之后的操作的花费的话的最大价值。从大到小枚举 \(i\),转移枚举用哪个实验。

\[f_i=\max_{j=1}^n\min_{k=i+l_j}^{i+r_j}(f_k-c_j) \]

\(n\) 个单调队列可以做到时空复杂度 \(O(na)\),恭喜点名被卡。(听说用 deque 就能艹过去???)
我们时时刻刻维护一个 \(mn_r\),表示 \([i,r]\)\(r\) 的最大值。这时转移到 \(f_{i-l_j}\),应该从 \(mn_{i-l_j+r_j}\) 转移到。
那么怎么维护 \(mn\) 呢?维护一个从栈顶到栈底单调递减的单调栈。每次压入一个数,如果比栈顶小,用并查集把栈顶的父亲设成自己。
时间复杂度 \(O(na\mathrm{DSU}(a))\),空间复杂度 \(O(a)\),实际表现十分优秀。

Day -38(Code+ 7)

全体 ISIJ 选手都要来打,我也不知道为什么(

对自己太有自信了,报了难的那组。

然后不知道跟什么一样,爆零了。

太丢脸了,不想写了。

Day -31(模拟赛 2)

开场还是码了 T1。T2 一眼不会,T3 一看是个板子?

去写 T3,然后挂了。撑死 90 上不去了,剩下两个点 MLE。

滚回去 T2。好像可以用个套路……

码完接着搞 T3,把各种东西换成 short,然而分数完全没变。自闭了。

最后半小时会了 T4(还不知道真不真),最后没调出来。

rk11,比上次还丢脸。

upd:好了,我的 T4 是假的 /cy

那最后没调出来也没那么难受了

个鬼啊,说不定能多骗点分

简要题解:

T1:\(nxt_i\) 表示 \(i\) 后面第一个比 \(i\) 高的位置。离线,按询问高度排序,每次把比这个高度小的建筑加进去,加的时候进行 \([i,nxt_i-1]\) 区间加一,然后全局最大值。

T2:要用到一个套路性质:非负权边树上,\(v\) 为离点 \(u\) 最远的点。那么 \(v\) 一定是某条直径的某个端点。那么倒过来,维护每个联通块的直径,合并就六种情况。

T3:真的完全是线段树分治裸题。但是怎么挂的我也不知道……

T4:二分一波。从左往右扫描线,对于一条竖线上的每个点,以它为右上角的矩形中有点,等价于它后面一段长 \(h-1\) 区间中,最大的纵坐标与当前扫到的纵坐标差不超过 \(w-1\)。那么加入一个点就区间取 min,判断就全局 min。(看起来很 trivial,然而我为什么会没想到……)

Day ???

不是很想更,咕着。

以后无聊了再来更。

Day 10

似乎又垫底了,开心。

搞 whk 去了。

posted @ 2020-05-16 15:05  ATS_nantf  阅读(1170)  评论(14编辑  收藏  举报