Educational Codeforces Round 83 简要题解

link


Problem A Two Regular Polygons

\(T\) 次询问,给定 \(n,\ m\) ,问能否在正 \(n\) 边形的顶点上选 \(m\) 个点,使得这 \(m\) 个点构成的图形的中心与正 \(n\) 边形相同

  • \(T\leq10^4\)
  • \(3\leq m<n\leq100\)

满足 \(m|n\) 即可


Problem B Bogosort

\(T\) 次询问,每次给定一个长为 \(n\) 的序列 \(a\) ,问能否找到 \(a\) 的一种排列 \(b\) 使得 \(\forall\ i<j,\ j-a_j\neq i-a_i\)

  • \(T\leq100\)
  • \(n,\ a_i\leq100\)

降序排序即可


Problem C Adding Powers

\(T\) 次询问,每次给定一个长为 \(n\) 的序列 \(a\) ,你有一个初始全为 \(0\) 的长 \(n\) 的序列 \(b\) ,在第 \(i\) 个时刻(从 \(0\) 开始),能选择一个 \(pos\) 并将 \(b_{pos}+k^i\) ,或者什么都不做,问能否将 \(b\) 变成 \(a\)

  • \(T\leq1000\)
  • \(n\leq30;\ k\leq100;\ a_i\in[0,\ 10^{16}]\)

判断给出的 \(n\) 个数中每个 \(k_i\) 是否出现了恰好 \(0\)\(1\)


Problem D Count the Arrays

统计满足下列条件的长度为 \(n\) 的序列 \(a\) 个数:

  • \(\forall\ 1\leq i\leq n,\ \exist\ 1\leq a_i\leq m\)
  • \(a\) 中存在且仅存在一对相同元素
  • 存在一个位置 \(p\) ,使得 \(a_1,\ a_2,\ \cdots,\ a_p\) 严格单调递增, \(a_p,\ a_{p+1},\ \cdots,\ a_n\) 严格单调递减

答案对 \(998244353\) 取模

\(n\leq m\leq2\times10^5\)

首先从 \(m\) 个数中选 \(n-1\) 个,除去最大数,剩下 \(n-2\) 个都能成为重复的数,除去最大数和两个重复的数,剩下 \(n-3\) 个可以自由选择是在最大数左侧还是右侧,因此答案为 \(\displaystyle\binom{m}{n-1}\times(n-2)\times2^{n-3}\)


Problem E Array Shrinking

给定一个长为 \(n\) 的序列 \(a\) ,你可以任意进行以下操作:

  • 找到一个 \(i\) 满足 \(a_i=a_{i+1}\) ,将两数删掉,替换成 \(a_i+1\)

问经过若干次操作后,序列长度最短是多少

\(n\leq500;\ a_i\leq1000\)

\(dp_i\) 为前 \(i\) 个数若干次操作后的最短长度,转移为 \(dp_i=\min\big\{dp_j+1\ |\ 0\leq j<i,\) 区间 \([j+1,\ i]\) 能合并成一段 \(\big\}\)

判定区间 \([l,\ r]\) 能否合并成一段可以区间 dp,然后就做完了


Problem F Attack on Red Kingdom

咕了,留坑待填


Problem G Autocompletion

给定 \(k\) 个两两不同的串组成的集合 \(S\)\(k\) 个串构成的 trie 的节点数为 \(n\) ,对于每个给出串,求出将空串变成该串的最小化费。

设当前串为 \(s\) ,可以进行两种操作:

  1. \(s\) 的最后添加任意一个字符,花费为 \(1\)
  2. 将所有 \(t\in S\)\(s\)\(t\) 的前缀的 \(t\) 拿出来按字典序排序,对于排序后的第 \(x\) 个串 \(t_x\) ,可以花费 \(x\)\(s\) 变成 \(t_x\)

\(n,\ k\leq10^6\)

考虑把对串的操作看成边,操作 \(1\) 相当于从 trie 上的父亲向儿子连一条边权为 \(1\) 的边,操作 \(2\) 相当于将当前串 trie 上对应点 \(u\) 向它子树中所有属于集合 \(S\) 的串按字典序排序后连边权为 \(1,\ 2,\ 3,\ \cdots\) 的边,接着跑最短路

操作 \(2\) 可以用线段树优化建图,给 \(S\) 中的所有串按字典序建成一个线段树,对于线段树上每个节点,向左儿子连边权为 \(0\) 的边,向右儿子连边权为 左儿子对应的区间大小 的边

时间复杂度 \(O(n\log^2n)\) ,CF上时限 7s,能跑过()

考虑操作 \(2\) 给当前串 trie 上对应点 \(u\) 的子树造成了什么贡献,记 \(rk_i\) 为第 \(i\) 个串在 \(S\) 中字典序的排名,走到当前串的最小化费为 \(x\) ,则 \(u\) 的子树中所有属于 \(S\) 的串 \(v\) 的答案可以对 \(x+rk_v-rk_u\)\(\min\) (需特殊考虑 \(u\in S\) 的情况),注意到 \(rk_v\)\(v\) 而言是固定的,因此拿棵线段树维护区间 \(x-rk_u\)\(\min\) 即可,时间复杂度 \(O(n\log n)\)

猜你喜欢

转载自www.cnblogs.com/Juanzhang/p/12459670.html
今日推荐