CF1907E Good Triples 题解

发布时间 2023-12-21 08:03:25作者: jr_inf

题意:求出 \(a+b+c=n\)\(d(a)+d(b)+d(c)=d(n)\) 的三元组 \((a,b,c)\) 的个数。其中 \(d(x)\) 等于 \(x\) 的各位数位之和。

根据直觉和样例解释可以知道,如果 \(a+b+c\) 没有发生进位,那么三元组 \((a,b,c)\) 一定合法。这里就不展开解释了。

然后考虑 \(a+b+c\) 发生进位时 \((a,b,c)\) 是否有可能合法。如果有进位的情况,那么此时 \(d(a)+d(b)+d(c)>d(a+b+c)\)(这里用 \(a+b+c\)\(n\) 要更加直观)。
而在上一种情况中 \(d(a')+d(b')+d(c')=d(a'+b'+c')\),所以当前情况一定不合法。

综上,\((a,b,c)\) 合法当且仅当 \(a+b+c=n\)\(a+b+c\) 没有进位,于是可以对于每一数位分别求解。设当前数位的值位 \(x\),那么此位的贡献就是 \(C_{x+2}^{2}=\frac{(x+2)(x+1)}{2}\),相当于把当前位的 \(x\) 分给 \(a,b,c\) 三个数且可以分到 \(0\) 的方案数。

每位贡献的乘积就是答案,时间复杂度 \(O(t \log n)\)