The Preliminary Contest for ICPC Asia Xuzhou 2019

Contest Info


[Practice Link](https://www.jisuanke.com/contest/3005?view=challenges)
Solved A B C D E F G H I J K L M
12/13 O O O O O Ø O Ø O O O - O
  • O 在比赛中通过
  • Ø 赛后通过
  • ! 尝试了但是失败了
  • - 没有尝试

Solutions


A. Who is better?

CRT+斐波那契博弈

B. so easy

题意:
\([1, n], n\)个数,有两种操作:

  • \(1 \quad x\),删去\(x\)
  • \(2 \quad x\),查询还未被删去的数中大于等于\(x\)的最小的数是多少

思路:
离散化后并查集维护即可,\(set\)常数有点大。

C. Buy Watermelon

不温暖的签到。

D. Carneginon

KMP模板题。

E. XKC's basketball team

题意:
给出\(n\)个数\(a_i\),对于每个数\(a_i\),要求找到位置位于它后面的一个\(a_j\),满足\(a_j \geq a_i + m\)并且\(j\)的下标最大。

思路:
单调栈维护一个从栈顶到栈底递减的序列,然后倒着过来对于每个数二分即可。

F. Little M's attack plan

题意:
有一棵\(n\)个点的无根树,每个点有点权,每次要查询离点\(u_i\)的距离小于等于\(k_i\)的所有点的点权和。
\(k \leq 100, q \leq 5000\)

思路:
考虑一个弱化版本,在一个有根树上,询问\(u_i\)的子树中距离\(u_i\)的距离小于等于\(k_i\)的点权和。
那么考虑用\(BIT\)维护一个以深度为下标的权值和。那么查询点在\(u_i\)上的询问,那么第一次访问到\(u_i\)的时候,记录一下相应深度区间的权值和,回溯上来的时候再查询一次,两次的差值就是答案。那么该弱化版本的答案记为\(F(u, k)\)
那么对于原问题,我们可以容斥解决,对与一个询问\((u, k)\),我们记答案为\(g(u, k)\),有:

\[\begin{eqnarray*} g(u, k) = f(u, k) + f(fa[u], k - 1) - f(u, k - 2) + f(fa[fa[u]], k - 2) - f(fa[u], k - 3) \cdots \end{eqnarray*} \]

那么就相当于把一个询问最多拆成\(k\)个询问,询问总数变成\(kq\)

G. Colorful String

题意:
定义一个字符串的价值为该字符串中不同字母个数。
现在求一个字符串\(S\)中所有回文子串的价值和。

思路:
本质不同的回文子串只有\(O(n)\)个,那么枚举每个本质不同的回文子串,得到其在原串中的位置\([l, r]\)
那么每个本质不同的回文子串的贡献就是其不同字母个数乘其出现次数。
那么对于\(O(n)\)\([l, r]\),离线后处理一下可以得到不同字母个数。

H. function

Min25

I. query

题意:
定义\(f(l, r)\)为有多少对\(i, j\)使得\(l \leq i < j \leq r\)并且\(min(p_i, p_j) = gcd(p_i, p_j)\),现在给出一个排列\(p\),有\(q\)次询问,每次询问给出\(l, r\),询问\(f(l, r)\)

思路:
考虑\(min(p_i, p_j) = gcd(p_i, p_j)\)相当于是一个数是另一个数的倍数。
那么我们发现这样的\(i, j\)的对数只有\(O(nlogn)\)对,预处理出对数然后就得到了一下\((x, y)\),每次询问相当于询问有多少对\((x, y)\)满足\(l \leq x, y \leq r\)
离线即可。

J. Random Access Iterator

K. Center

M. Longest subsequence

题意:
给出一个字符串\(S\),现在要求要出\(S\)中的一个最长子序列,使得它的字典序严格大于字符串\(t\)

思路:
考虑从第几位开始不同,那么这一位肯定是字典序大于\(t\)对应的位。
那么建立序列自动机,然后匹配即可,然后找下一位字典序比\(t\)那一位大的,下标最小的,那么后面的全都接上字典序都会比\(t\)大。

posted @ 2019-09-09 09:19  Dup4  阅读(259)  评论(0编辑  收藏  举报