其他分享
首页 > 其他分享> > CF792C题解

CF792C题解

作者:互联网

题面

Description:
给你一个数 \(n\),在其中删除尽可能少的数码,使得得到的数不含前导零且被 \(3\) 整除。
\(n\leq10^{10^5}\)


暴力分类讨论做法。
首先,我们将 \(n\) 的每一位用这一位 \(\bmod3\) 代替,明显的这样不会产生任何影响。
首先关于 \(n\bmod3\) 可以分成三类:

  1. \(n\bmod3=0\),原封不动输出即可。
  2. \(n\bmod3=1\),那要么删除 \(1\) 个 \(1\),要么删除 \(2\) 个 \(2\)。
  3. \(n\bmod3=2\),那要么删除 \(2\) 个 \(1\),要么删除 \(1\) 个 \(2\)。

现在考虑实现一个函数 \(\operatorname{del}\{a,b\}\) 返回 \(n\) 删除 \(a\) 个 \(b\) 所得到的数。
为了减少前导零的出现,我们采取贪心的方法,从右往左删。删完预定的数字以后,再统一去除前导零。不难证明,这是最优的删数方法。
当然,还有一层特判。如果采用前面的删数方法都无解,但是 \(n\) 的各个数位中本身有 \(0\),那就输出单个 \(0\)。如果没有 \(0\),那显然无解。
注意函数返回值的代码实现。个人认为用全局变量回传会好写一点。但这样别忘记数组的清零。

代码

标签:CF792C,删除,题解,方法,删数,要么,前导,bmod3
来源: https://www.cnblogs.com/1358id/p/16343800.html