【WC2019笔记】IOI2018 / ACM题目选讲

Xylophone
IOI2018 练习赛 T2
题意:交互提
有一个 $0\sim n-1$ 的排列,保证 $0$ 在 $n-1$ 左边。
你每次可以询问一个区间,会得到这个区间的 最大值 $-$最小值。
要用不超过 $10000$ 次询问还原出这个排列。
范围:
子任务 $1$($11pts$)$n\le 100$
子任务 $2$($36pts$)$n\le 1000$
子任务 $3$($53pts$)$n\le 5000$

题解
假设 第一个数 $<$ 第二个数,不妨假设第一个数是 $0$,之后再调整即可。
考虑询问所有长为 $2$ 的区间和长为 $3$ 的区间。
从左往右,考虑连续三个数 $x,y,z$,假设我们已经确定了 $x,y$ 的大小关系,那么
如果 $x,y,z$ 中最大值-最小值=$x-y$,说明 $z$ 在 $x,y$ 中间,根据 $y,z$ 的差可确定 $z$。
否则 $z$ 在 $x,y$ 之外,同样可根据 $y,z$ 的差确定 $z$。
$O(n)$ 枚举前两个数,然后 $O(n)$ 推出序列剩下的数。排除不合法的解后(即序列的值域不在 $[0,n-1]$ 范围内),如果一组合法的解中,$0$ 在 $n-1$ 的右边,把每个数 $x$ 变为 $n-x-1$ 即可。
设第一个数为 $0$,然后 $O(n)$ 推出序列剩下的数。假设序列的值域是 $[x,x+n-1]$,把序列中的所有数 $-x$ 即可得到值域正常的序列。然后如果这组解中,$0$ 在 $n-1$ 的右边,

Bubble Sort 2
IOI2018 练习赛 T3
题意:
给出一个长为 $n$ 的序列。
定义一次“挪动”操作为:从前往后考虑每个数,若 $A_i\gt A_{i+1}$ 就交换 $A_i$ 和 $A_{i+1}$。
现在有 $q$ 次修改操作,每次修改一个数,然后回答整个序列需要多少次“挪动”操作才能把序列排成升序。
范围:
$n,q\le 500000$

题解
~~冒泡排序裸题~~
首先考虑怎么计算答案。
观察冒泡排序的过程,可以发现每一轮做完之后,每个数前面的最大数(如果比它大的话)都会被放到它后面去。
于是答案应该是 $\max\{一个数前面比它大的数的个数\}$,也就是 $\max\{i-前面\le A_i 的数的个数\}$
可以用树套树或 $KDTree$ 维护,复杂度都爆。
注意到如果前后有两个数 $x,y$,$x\ge y$,那么 $x$ 是不可能成为答案的,因为此时 $x$ 的答案严格小于 $y$ 的答案。
把刚才的式子改成 $\max\{i-\le A_i 的数的个数\}$
当 $x$ 后面还有比它小的数时,会多减导致不优,但此时 $x$ 一定不会成为最优答案。
这样就可以用一颗线段树维护了,复杂度 $O(n\times log(n))$。

Road Service
IOI2018 练习赛 T4
题意:提答题
给出一棵 $n$ 个点的树,需要你加 $k$ 条边,使得所有点对之间的距离和最小。所有边长均为 $1$。
根据你的答案给分。
范围:
子任务 $1$($10pts$):$n=20,\space k=4$
子任务 $2$ 到 $5$ 不抄了,每个任务的分值都是 $18pts$。
子任务 $6$($18pts$):$n=1000\space k=300$

题解:
枚举一个点,把 $k$ 条加边都从这个点连出去,这样可以得到很优的答案。
证明:把 $k$ 条边的公共出发点设为根节点,
爬山?
考虑选出的 $k$ 个点的集合,随机进行调整,如果更优就记录下来。
任轩迪在模拟赛爬了 $91$ 分,试机赛爬了 $99$ 分……
$DP$?
假装我们是要选出 $k$ 个关键点,使得所有点到关键点的距离最小。
不考虑两点直达的情况。
再假装最优解里每个点到最近的关键点的距离不会太大(比如不超过 $10$)。
于是可以多项式时间 $DP$ 了,可以得到 $100$ 分。

组合动作(Combo)
IOI2018 D1T1
题意:交互提
有一个长为 $n$ 的只由 $ABXY$ 组成的字符串 $S$,保证 $S$ 的首字母只出现一次。你每次可以询问一个只由 $ABXY$ 四种字符组成的、长度不超过 $4n$ 的串 $p$,他会告诉你既是 $p$ 的子串又是 $S$ 的前缀的最长串的长度。需要你用最少的询问次数确定这个串 $S$。
范围:
见原题

首先用 $2$ 次询问确定首字母(默认你会二分)。
设已知的前缀是 $s$,每次询问 $sB$,如果不是就询问 $sX$,如果再不是就是 $sY$。
这样的步数是 $2n$,可以拿 $30$ 分。
注意我们可以把多个串连在一起,在一次中询问。由于首字母只会在 $S$ 中出现一次,回答出来的就是我们问的串的答案中的最大值。
仍然用 $2$ 次询问确定首字母,假设为 $A$。
考虑如何确定下一位,可以询问这个串:$sBsXBsXXsXY$。
如果询问结果是 $s$ 的长度 $+1$,下一位就是 $B$,如果是长度 $+2$,下一位就是 $X$,否则下一位就是 $Y$。
最后一步要多花一步特判,总共需要 $n+2$ 步,可以拿到 $100$ 分。

然而任轩迪大佬在考 $IOI2018$ 的时候用的方法跟这方法不太一样……

狼人(Werewolf)
IOI2018 D1T3

现在相当于求是否有一个点既在第一棵子树中,
相当于询问是否存在一个中间点 $X$,

排座位(Seats)
题意:
有一个 $H\times W$ 的矩阵,里面是 $0\space \sim\space H\times W-1$ 的一个排列。
如果一个大小为 $k$ 的子矩阵里面恰好包含的是 $0\space \sim\space k-1$ 这 $k$ 个数,则称这个子矩阵是美妙的。现在有 $q$ 个操作,每次交换两个点上的数,然后询问总共有多少个美妙的子矩阵。
范围:
见原题

猜你喜欢

转载自www.cnblogs.com/scx2015noip-as-php/p/10323590.html
今日推荐