题目链接:Problem - 3709

题意:给定区间[a,b],求区间内平衡数的个数。所谓平衡数即有一位做平衡点,左右两边数字的力矩相等。
分析,这道题我们直接对平衡点进行枚举即可,然后分别求出来每个平衡点对应的平衡数求和,最后即为答案。
需要注意的是前缀0的情况,对于000000000这样的答案我们实际上是不应该计入答案的,也就是说我们在数位DP的过程中需要考虑前导0,在pos=0最后返回的时候也要判断当前是否有前导0的存在,如果有前导0就直接返回0,否则返回当前平衡数左边和右边的力矩差与0判等的bool值。这里需要注意的一点是由于我们在数位DP中没有考虑前导0,但这会导致我们少考虑一个数,那就是0,所以如果l~r内包含0,我们还应该加上一个1,对应到代码中就是若x<0,则在solve函数中直接返回-1。
当然我们也可以在数位DP过程中不考虑前导0,而在最后统一减去前导0的贡献,也就是ans-pos+1
下面分别附上两种方法的代码:
数位DP过程中考虑前导0:
#include<cstdio>
#include<iostream>
#include<cstring>
#include<vector>
#include

本文探讨了如何使用两种不同的数位动态规划方法解决给定区间内平衡数的问题,涉及考虑前导0和不考虑前导0两种策略,通过实例代码展示了如何计算平衡数的个数。
最低0.47元/天 解锁文章
9243

被折叠的 条评论
为什么被折叠?



