我们设S0、S1、S2分别为原串上mod3=0、1、2数字的个数。 我们假定删除取模后为0、1、2的数字各a、b、c个,则显然有0<=A<=S0,0<=B<=S1,0<=C<=S2且K=A+B+C且Sum
mod3=(A∗0+B∗1+C∗2)mod3=(S0∗0+S1∗1+S2∗2)mod3=bias 。 枚举 C 的值,我们可得Bmod3=(bias−C∗2)mod3,A=K−B−C。如果有若干组A,B不逾界,可知这些(A,B,C)是在模意义下合法的解,但不一定满足没有前导零。
所以,对于【大于0的数】我们贪心地从后往前删除,对于0我们贪心地从前往后删除。
需要统计出:E3=第一个【mod3=0且非0的数】前0的个数(如果mod3=0且非0的数不存在,那么a3就取所有零的个数),E1=【第一个0前是否存在mod3=1的数】,E2=【第一个0前是否存在mod3=2的数】。
则以下情况满足任一种都能保证无前导零:A>=E3。B<S1且E1。C<S2且E2。
还需要加一种情况 满足k==n-1 也是yes:
AC代码:
#include
#include
#include
#include
#include
#include
#include
#include
再推荐一道好题:https://oj.ejq.me/problem/24 (大数整除6的最大位数)
我的博客http://blog.csdn.net/xiangaccepted/article/details/69951928有这道题的解法(用的是dp);
你可能感兴趣的:(杭电,思路题,比赛总结,大数整除3,HDU,思路题)