zoukankan      html  css  js  c++  java
  • 【WC2019笔记】IOI2018 / ACM题目选讲

    哇!济南的 rqy 大佬讲课!就是 $luogu$ 上有名的那位!

    上面这句话写错了,请大家无视

    Xylophone
    IOI2018 练习赛 T2
    题意:交互提
    有一个 $0sim n-1$ 的排列,保证 $0$ 在 $n-1$ 左边。
    你每次可以询问一个区间,会得到这个区间的 最大值 $-$最小值。
    要用不超过 $10000$ 次询问还原出这个排列。
    范围:
    子任务 $1$($11pts$)$nle 100$
    子任务 $2$($36pts$)$nle 1000$
    子任务 $3$($53pts$)$nle 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_igt A_{i+1}$ 就交换 $A_i$ 和 $A_{i+1}$。
    现在有 $q$ 次修改操作,每次修改一个数,然后回答整个序列需要多少次“挪动”操作才能把序列排成升序。
    范围:
    $n,qle 500000$

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

    Road Service
    IOI2018 练习赛 T4
    题意:提答题
    给出一棵 $n$ 个点的树,需要你加 $k$ 条边,使得所有点对之间的距离和最小。所有边长均为 $1$。
    根据你的答案给分。
    范围:
    子任务 $1$($10pts$):$n=20,space k=4$
    子任务 $2$ 到 $5$ 不抄了,每个任务的分值都是 $18pts$。
    子任务 $6$($18pts$):$n=1000space 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 imes W$ 的矩阵,里面是 $0space simspace H imes W-1$ 的一个排列。

    如果一个大小为 $k$ 的子矩阵里面恰好包含的是 $0space simspace k-1$ 这 $k$ 个数,则称这个子矩阵是美妙的。

    现在有 $q$ 个操作,每次交换两个点上的数,然后询问总共有多少个美妙的子矩阵。

    范围

    见原题

    子任务 $1,2$

    从小到大考虑每个元素的位置。求出前 $i$ 个数的横纵坐标的最大值和最小值。

    子任务 $4$

    注意到两人的位置交换后,只有处于它们之间的 $max_x,min_x,max_y,min_y$ 会变。

    所以修改后只需要把中间这些信息暴力重算即可。

    子任务 $3$

    合法的矩阵不超过 $H+W$ 个。

    考虑从 $1$ 所在位置开始,如果下一个数不在当前矩形里,那么长或宽至少要 $+1$。

    复杂度 $O(2000 imes Q)$。

    到此为止,$IOI2018$ 现场大部分人拿了上述 $37$ 分。

    子任务 $5$

    相当于询问前 $k$ 个数是否构成一个连通块。由于 $H=1$,$k$ 个数当前连成一条链。

    即询问“点数-边数”是否等于 $1$。点数就是 $k$,边数就是方块中两个数都 $le k$ 的 $1 imes 2$ 大小方块数量。

    对于每个 $k$ 维护这个数量,一次修改时只会影响常数个 $1 imes 2$ 方块(就是它所在的俩),对应到线段树中就是后缀加减操作。

    询问线段树最小值及最小值的个数即可。

    复杂度 $O(HW+Qlog(HW))$。

    子任务 $6$

    考虑沿用子任务 $5$ 的思想,相当于询问前 $k$ 个数是否构成一个连通块,且这个连通块是一个矩形。

    不妨称 $le k$ 的点为黑点,$gt k$ 的点为白点。可以判断以下条件:

    - 左边和上边都不是黑点的黑点有恰好 $1$ 个

    - 上下左右有至少 $2$ 个黑点的白点只有 $0$ 个

    条件 $1$ 保证了是一个连通块,条件 $2$ 保证了是个矩形。

    注意到条件 $1$ 中合法的不会 $lt 1$ 个,条件 $2$ 中合法的不会 $lt 0$ 个,于是只要加起来看是否 $=1$ 就行了。

    对于每个 $k$,

    Rainbow
    APIO2017 T1
    题意:
    有一个 $R imes C$ 的网络,有一条蛇,它从 $(r,c)$ 出发,按照给出的一个长为 $m$ 的移动序列往上下左右移动。它经过的格子都会变成河流。
    现在有 $Q$ 次询问:给出一个子矩形,问这个子矩形内的陆地有多少个四连通块?
    范围:
    见原题

    题解:

    称河流为黑点,陆地为白点。那就是问一个子矩形内有多少白点构成的四连通块。

    如果每个连通块都是树,那么连通块的数量就等于 点数 $-$ 边数。

    这题是网格图,考虑“白点数量”$-$“$1 imes 2$ 的白矩形数量”$-$“$2 imes 1$ 的白矩形数量”$+$“$2 imes 2$ 的白矩形数量”。

    当且仅当白点包了一个环把黑点包住时会多减 $1$。

    由于黑点是连通的,只有这种情况要特判。判下黑点横纵坐标最大最小值

    注意到虽然网格很大,但我们只需要关心黑点旁边那一圈点,只有 $O(m)$ 个。

    每一类信息都用总数减去不合法的方案数就可以了。用主席树维护矩阵信息。

    复杂度 $O((m+Q) imes log(R+C))$。

    Rikka with Consistency

    2018-2019, Xuzhou Regional Contest, C

    题意:

    有一条折线,拐点坐标为 $(i,H_i)$。其中 $H_0=H_n=0$。

    Rikka with Data Structures

    2018-2019, Xuzhou Regional Contest, E

    题意:

    维护一个序列,支持:

    1.区间加

    2.区间赋值

    3.给出 $x$ 和一个区间 $[l,r]$,问 $[l,r]$ 中有多少个 $y$,满足 $A[x...y]$ 的最大值 $=$ $max(A[x],A[y])$。

    范围:

    $n,mle 10^5$

    题解

    不妨假设 $x$ 在 $[l,r]$ 左边。如果 $x$ 在 $[l,r]$ 中只要拆成两个区间就可以了。

    考虑 $[x,l]$ 中的最大值 $v$,那么从 $v$ 开始的不递减序列显然每个都合法。

    如果 $v=A[x]$,那么从 $l$ 开始直到第一个 $gt v$ 的位置

    现在相当于对于一个区间 $[l,r]$,从 $v$ 开始,从左往右每次跳到下一个 $ge$ 它的位置,求能跳几次、出来是什么。

    线段树维护每个区间最大值、右区间内从左区间的最大值开始跳能跳几次、出来是什么。

    询问时通过讨论 $v$ 和左区间最大值的关系就可以递归到左右。复杂度 $O(log(n))$。

    Rikka with Sorting Networks

    2018-2019, Xuzhou Regional Contest, I

    题意

    按顺序给出 $k$ 个排序网络的比较器 $(u,v)$,即若 $A[u]gt A[v]$ 就交换 $u,v$。

    问多少 $1sim n$ 的排列经过这个网络之后,最长上升子序列长度至少为 $n-1$。

    范围

    $100$ 组数据,$nle 50,space kle 10$。

    题解

    最长上升子序列长度至少为 $n-1$ 的排列只有 $O(n^2)$ 个。

    排序网络本质上是如果满足一些大小关系就进行一些交换。

    两个不同的排列经过排序网络,如果每次比较的结果都相同,那么出来的仍然是两个不同的排列(进行的交换相同)。

    那么直接枚举最终的排列,$O(2^k)$ 枚举每个比较器的比较结果,倒着推上去看看是否会矛盾就可以了。

    复杂度 $O(T n^2 2^k)$。

    此处跳过一道插头 $dp$ 裸题($rxd$ 大佬几句话带过了)。

    Tournament

    2018-2019, Qingdao Regional Contest, F

    题意

    有 $n$ 个骑士,要进行 $k$ 轮决斗。每轮决斗中,每个骑士都要和另一个骑士单挑。需要满足:

    1. 任意两个骑士在 $k$ 轮决斗中最多只会单挑 $1$ 次。

    2. 如果对于两场决斗 $ilt j$,在第 $i$ 场中 $A$ 和 $B$ 单挑,$C$ 和 $D$ 单挑,那么在第 $j$ 场中若 $A$ 和 $C$ 单挑,则 $B$ 必须和 $D$ 单挑。

    请你给出一个字典序最小的解或输出无解。

    范围

    $n,kle 1000$

    题解

    爆搜或者手玩一下,然后观察一下:

    1-2 3-4 5-6 7-8

    1-3 2-4 5-7 6-8

    1-4 2-3 5-8 6-7

    1-5 2-6 3-7 4-8

    1-6 2-5 3-8 4-7

    1-7 2-8 3-5 4-6

    1-8 2-7 3-6 4-5

    可以发现构造策略就是第 $i$ 次 $1$ 和 $i+1$ 打,然后到 $2$ 的幂次为止的值都可以由前面的信息确定出来。再往后平移一下就可以了。

    由此也可以知道当且仅当 $kge lowbit(n)$ 时无解。

    Counting Sheep in Ami Dongsuo

    2018-2019, Shenyang Regional Contest, F

    题意

    有一张 $n$ 个点的拓扑图,每个点有个权值,权值不超过 $w$。

    有三个人要从同一个点出发,走三条不同的路线。这种方案的权值就是他们最后停在的那三个点的权值和。

    对于 $k=0sim 30000$,问权值为 $k$ 的方案有多少种。膜 $10^9+7$。

    范围

     $nle 10000,space mle 30000,space wle 400$

    题解

    三条路线要不同的限制,只要容斥一下就行了。

    考虑求从一个点出发,三个结束点权值为 $w$ 的方案数。

    直接做就是个卷积,$O(mwlog(w))$。

    可以把 $1sim 3w$ 拿进去求点值,

    Cherry and Chocolate

    2018-2019, Nanjing Regional Contest, C

    现在假设已经有了一个方案 $(x,y,z)$,考虑被控制的点的集合:

        - $x$ 除了 $y$ 所在子树外的所有子树

        - $y$ 的 $z$ 所在连通子图

    如果 $x$ 往 $y$ 以外的方向移动,$B$ 可以保持 $y$ 不变,这样若 $z$ 是 $y$ 的父亲,答案不变,否则答案变小,对 $A$ 不利。

    Huge Discount

    2018-2019, Nanjing Regional Contest, H

    题意

    有一个长为 $10^5$ 的只含 $0,1,2$ 的数字串,

    Lagrange the Chef

    2018-2019, Nanjing Regional Contest, L

    题意

    给出 $n,X,Y$ 和 $n$ 个数 $A_i$,要通过若干次把某个数移动到

    考虑如果有一对相邻的 $X,Y$,如何处理:

        - 拿一个不是 $X,Y$ 的数夹到它们中间

        - 把 $X$ 或者 $Y$ 放到别的地方去

    观察第二种操作可以放到什么地方去,由于连续的一段 $X$ 和一个 $X$ 完全等价,所以显然

    于是可以 $DP$ 了:$dp_{i,j,x,y,0/1/2}$ 表示考虑了前 $i$ 个数字、“用来夹到后面的 $XY$ 中间的数”减去“前面的 $XY$ 尚待用后面的数夹的”个数为 $j$,

    Immortal ...Universe

    2018-2019 ACM-ICPC, Asia East Continent Finals, E

    题意

    有两个长度为 $n$ 的、由 $P$ 和 $V$ 构成的序列。一个人从

    题解

    观察到有可能输的充要条件是存

  • 相关阅读:
    String类
    try catch异常捕获
    while循环语句
    编程中穷举法的运用
    for循环例题
    编程中的 if ()else() 语句
    代位符
    运算符_及_运算符优先级
    C#中的类型转换
    Asp.net基础知识
  • 原文地址:https://www.cnblogs.com/scx2015noip-as-php/p/WC2019_pm.html
Copyright © 2011-2022 走看看