罪的晚风,可曾带回朝露映的清纯?|

LarsWerner

园龄:4年11个月粉丝:20关注:3

JOISC 2018 题解

没做计算几何题和提交答案题。

JOISC2018 Day1 Construction of Highway 道路建设

注意到题目中的操作相当于就是到根的路径染色,我们离线下来进行树剖,每条重链维护连续段,然后显然均摊会修改 O(nlogn) 段。我们每次修改时可以取出所有连续段,然后题目问逆序对数,我们对这些连续段跑一次逆序对即可。复杂度 O(n2logn)

https://qoj.ac/submission/104349

JOISC2018 Day1 Tents 帐篷

我们把行/列上的一对看成一组,每一组会消耗一行两列/两行一列。所以我们先枚举我们放几个横对,枚举放几个行对,枚举放几个列对,再枚举放几个单点,式子就长成这样(令 g(x) 表示 (2x2;2;...;2)

x(nx)(m2x)g(x)y(n2xy)(nx2y)g(y)z(nx2yz)(my2xz)z!4z

把后面的东西拎出来,令 F(p,q)=z(pz)(qz)z!4z,我们把 (pz) 拆了然后再把 z!(qz) 化成 q(z1)!(q1z1),得到 F(p,q)=F(p1,q)+4qF(p1,q1)。然后就可以 O(n2) 做了。

https://qoj.ac/submission/104363

* JOISC2018 Day2 修行 Asceticism

即求欧拉数。

首先二项式反演,钦定有 k 个小于号,即 nk 个上升连续段。一个上升段的 EGF 为 ez1nk 个段的 EGF 即 [znn!](ez1)nk=i=0nk(1)nki(nki)[znn!]eiz=i=0nk(1)nki(nki)in。于是我们可以得到答案为

ans=k(km)(1)kmiin(1)nki(nki)=iin(1)nmik(km)(nki)=iin(1)n+m+i(n+1m+i+1)

https://loj.ac/s/1773669

JOISC2018 Day2 最坏记者3 Worst Reporter 3

我们考虑每个人往后走的长度一定是前一个的整数倍。于是我们预处理一下,把长度相同的并起来,然后每次询问暴力查看是否在区间即可。复杂度 O((n+q)logn)

https://qoj.ac/submission/104631

JOISC2018 Day3 比太郎的聚会 Bitaro’s Party

看上去不是很好维护,考虑根号分治,暴力维护。我们对于每个点维护能到达它的前 B 大的点,然后这个是可以直接转移时归并的。然后不能来的点数 B 的时候就考虑直接暴力做。B 稍微小一点跑的会比较快。

https://qoj.ac/submission/104697

* JOISC2018 Day3 安全门 Security Gate

对于括号序列串 C,设前缀和 S 和后缀和 T,假设我们反转的区间为 [l+1,r],令 r=r+1,那么合法当且仅当:S[1,l]0T[r,n]0Sr2SlSrSl=Sn/2。我们对原串进行分类讨论。第一种,原串本身就是合法串,直接 DP。第二种,原串满足 S[1,n]0,但是存在 Ti<0。第三种,原串满足 T[1,n]0,但是存在 Si<0。这两种情况对称。第四种,原串存在 Ti<0 且存在 Si<0

考虑第二三种如何处理。这时我们的决策一定是找到最小的 Ti<0 的位置 x(满足 x 处为右括号),在 [1,x1] 中取最早出现的 Si 最大值的位置作为 l,并贪心找 l 后面的第一个满足 SrSl=Sn 的位置 r。我们令 Sl=aSn=b,则 Sr=a+b/2,于是 Tr=ab/2。我们 DP gi,j,k 表示对于 [1,i]Si=j,前缀最大 Si=k,那么 [1,x1] 满足 Sl=j 的方案数为 gx1,0,j。设计 DP fu,i,j,0/1 表示钦定 Tr=u[i,n]Ti=ji 是否已经在被翻转的区间中(i<r)。而我们限制即 fi,,1=0 满足 u(因为钦定了 r 是第一个满足要求的),2u(对限制进行化简得到)。然后答案即 u,i,jgi1,0,jfu,i+1,2u2j1,[2ju<1]

然后考虑第四种如何处理。这时我们的决策对于 l 也是一样的,对于 r 要满足 r 及之后的 T>0。但是这需要满足 Sl+Sn/2Sr。但是其实如果我们把整个串翻过来然后左右括号反以下,发现如果正过来不满足这个条件那必然反过来后满足,唯一的问题是 Sl+Sn/2=Sr 时会算重,减掉就行了。考虑 DP。从 rl 走,如果已经经历过 T<0 的话,那么这之后再出现 Ti=u 就无所谓了,于是还要加一个 fi,j,2 表示目前已经经历过 T<0 了。然后其它都是差不多的。

https://qoj.ac/submission/105912

JOISC2018 Day4 糖 Candies

反悔贪心。用一个链表维护,然后每次把 ai 变成 apreai+anxt 即可。需要注意边界的情况,如果处理的是边界的点那么需要直接删掉。

https://qoj.ac/submission/104884

JOISC2018 Day4 图书馆 Library

首先我们 n 次问询问出第一个元素。然后我们考虑每次找到紧跟着这个元素 x 后面的那个元素。我们考虑维护一个候选集合 S,每次选 S 中的一半,问一次 S 和一次 S{x},就能判断后面那个元素是否在 S 中。

https://qoj.ac/submission/104885

JOISC2018 Day4 野猪 Wild Boar

每年就总有一道这种题,让人写的痛不欲生。

首先我们考虑对于一条路径,它真正有用的信息只有长度,和首尾两条边是什么。如果我们想要合并两条路径 X,Y,我们只需要 X 的最后一条边和 Y 的第一条边不相等。我们维护 (u,v) 之间的五条路径:最短路,钦定首边与最短路不同的最短路,钦定尾边与最短路不同的最短路,钦定首尾边都不同的最短路。然后我们就可以在线段树上维护询问了。

然后就是这些东西怎么求。我的sb做法是:对于每个边 st,记录 fu,0/1 表示 s 出发且第一步是 st 的最短/次短路,且保证次短路的尾边与最短路不同。这个有很多的细节。然后将所有记录下来的路径排序之后从前往后找路径。我的代码距离爆 1G 的内存,只差 0.8M。很危险。

https://qoj.ac/submission/105586

本文作者:LarsWerner

本文链接:https://www.cnblogs.com/TetrisCandy/p/17403403.html

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

posted @   LarsWerner  阅读(422)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起