Content:模拟赛
Date:2025.8.15

Problem-A 图书配对

题目描述

给定 nn 本图书,定义 merge(ai,aj)merge(a_{i},a_{j}) 表示 aia_i, aja_{j} 直接拼接得到的结果,求满足 merge(ai,aj)9merge(a_{i},a_{j}) \mid 9 的个数(一个数只能取一次)。

解题思路

我们可以运用小学奥数的知识,如果一个数能被 99 整除,当且仅当这个数的各个数位之和能被 99 整除,知道这个之后就是一个很经典的问题了。

提交记录:Link

Problem-B 菜品搭配

题目描述

给定数组 aa,求 i=0n2j=i+1n1k=j+1n(aiaj)×(ajak)\displaystyle \sum_{i=0}^{n-2} \sum_{j=i+1}^{n-1} \sum_{k=j+1}^{n} (a_{i} \oplus a_{j}) \times (a_{j} \oplus a_{k})

解题思路

由于是二进制意义下的异或运算,很容易想到拆位,计算每一位的贡献。而且求的是三元组 (i,j,k)(i,j,k),所以我们枚举 jj 的位置,考虑 jj 左右两边的贡献。

对于异或 相同为 0,不同为 1 的运算法则,我们可以发现,i,ki,k 对于 jj 的贡献是左右两边与 jj 不相同的位置的个数的乘积,所以我们对于每一个位置计算贡献即可。

涂胶记录:Link

Problem-C 课程推荐

题目大意

给你一个数组 aa,其中 aia_i 表示到达 ii 这个位置后你可以到达 [i+1,ai][i+1,a_{i}] 中的任何一个位置,求 i,j\forall i,j 互相可达的最小步数之和。

解题思路

赛时没有想到是 dpdp,直接写了个 Floyd (20pts) + 部分分(10pts)。

正解是定义 di,jd_{i,j} 表示从 iijj 需要的最少步数。容易发现:

  • j[i+1,ai]j \in [i + 1, a_{i}],则 di,j=1d_{i,j}=1
  • j>aij > a_{i},则 di,j=dk,j+1d_{i,j} = d_{k,j} + 1,其中 kk 表示 maxt[i+1,ai]at\max_{t\in[i + 1, a_{i}]} a_t 所在的位置。

然后记 fi=j=indi,j\displaystyle f_{i} = \sum_{j=i}^{n} d_{i,j},则 fi=fp+(ni)(aip)f_{i} = f_{p} + (n - i) - (a_{i} - p)。答案即为 i=0nfi\displaystyle \sum_{i=0}^{n} f_{i}


终于结束啦喵~