CodeForces-1144E Median String

CodeForces-1144E Median String

tag: *1900;进制

给定两个字符串 \(s\)\(t\),它们都由恰好 \(k\) 个小写拉丁字母组成,且 \(s\) 的字典序严格小于 \(t\)

我们考虑所有长度为 \(k\) 的小写拉丁字母字符串中,字典序不小于 \(s\) 且不大于 \(t\)(包括 \(s\)\(t\))的字符串,按字典序排列。

例如,当 \(k=2\)\(s=\texttt{az}\)\(t=\texttt{bf}\) 时,所有满足条件的字符串为 \([\texttt{az},\texttt{ba},\texttt{bb},\texttt{bc},\texttt{bd},\texttt{be},\texttt{bf}]\)

输出这个列表的中位数(即中间的元素)。对于上面的例子,中位数是 \(\texttt{bc}\)。保证满足条件的字符串个数是奇数。

\(1 \le k \le 2 \cdot 10^5\)

首先计算满足条件的字符串总数 \(C\)。长度为 \(k\) 的小写字母串一共有 \(26^k\) 个,设字符串 \(S=S_1S_2\cdots S_k\) 排名为 \(r_k(S)\),则相当于将 \(S\) 看成 \(26\) 进制数,即

\[r_k(S)=\sum_{i=1}^kr_1(S_i)\cdot26^{k-i}, \]

其中 \(r_1(\texttt{a})=0,r_1(\texttt{b})=1\),以此类推。因此我们要找排名为 \(\dfrac{r_k(s)+r_k(t)}2\) 的串。

由于 \(k\) 太大,不能转为十进制计算,考虑直接对这个 \(26\) 进制数执行类似于高精度的加法和除法(除以 \(2\))。

Submission #344426565 - Codeforces

posted @ 2025-10-23 16:37  f2021ljh  阅读(2)  评论(0)    收藏  举报