Problem Description
Here is a function f(x):
   int f ( int x ) {
    if ( x == 0 ) return 0;
    return f ( x / 10 ) + x % 10;
   }

Now, you want to know, in a given interval [A, B] (1 <= A <= B <= 10
9), how many integer x that mod f(x) equal to 0.

 
Input
The first line has an integer T (1 <= T <= 50), indicate the number of test cases.

Each test case has two integers A, B.

 
Output
For each test case, output only one line containing the case number and an integer indicated the number of x.

 
Sample Input
2
1 10
11 20
 
Sample Output
Case 1: 10
Case 2: 3
 

题意:计算区间内一个数字各位之和能整除该数字的个数

思路:

分别计算出[1, b]中符合条件的个数和[1, a-1]中符合条件的个数。

d[l][i][j][k]表示前l位和为i模j的结果为k的数的个数,那么就有方程

d[l+1][i+x][j][(k*10+x)%j] += d[l][i][j][k]

预处理出d[l][i][j][k],然后再逐位统计即可

#include <stdio.h>
#include <string.h>
#include <algorithm>
using namespace std; int bit[10];
int dp[10][82][82][82];
//d[l][i][j][k]表示前l位和为i模j的结果为k的数的个数
void set()
{
int i,j,k,l,x;
for(i = 1; i<=81; i++)
dp[0][0][i][0] = 1;
for(l = 0; l<9; l++)
for(i = 0; i<=l*9; i++)
for(j = 1; j<=81; j++)
for(k = 0; k<j; k++)
for(x = 0; x<=9; x++)
dp[l+1][i+x][j][(k*10+x)%j] += dp[l][i][j][k];
} int solve(int n)
{
if(!n)
return 0;
int ans,i,j,k,len;
int sum,tem1,tem2,s,bit[10],r;
len = sum = ans = 0;
tem1 = tem2 = n;
s = 1;
while(tem1)
{
bit[++len] = tem1%10;
tem1/=10;
sum+=bit[len];//每位数之和
}
if(n%sum==0)//本身要先看是否整除
ans++;
for(i = 1; i<=len; i++)
{
sum-=bit[i];//将该位清0
tem2/=10;
s*=10;
tem1 = tem2*s;
for(j = 0; j<bit[i]; j++) //枚举该位的状况
{
for(k = sum+j; k<=sum+j+9*(i-1); k++) //该位与更高位的和,而比该位低的和择优9*(i-1)种
{
if(!k)//和为0的状况不符合
continue;
r = tem1%k;//现在该数对各位和进行取余
if(r)
r = k-r;//余数大于0,那么k-dd得到的数肯定能被t整除
ans+=dp[i-1][k-sum-j][k][r];//加上个数
}
tem1+=s/10;//标记现在算到哪里,例如1234,一开始t是1230,然后1231,1232,1233,1234,接下来1200,就是1210,1220,1230
}
}
return ans;
} int main()
{
int T,l,r,cas = 1;
set();
scanf("%d",&T);
while(T--)
{
scanf("%d%d",&l,&r);
printf("Case %d: %d\n",cas++,solve(r)-solve(l-1));
} return 0;
}

最新文章

  1. .net学习之母版页执行顺序、jsonp跨域请求原理、IsPostBack原理、服务器端控件按钮Button点击时的过程、缓存、IHttpModule 过滤器
  2. [WebLoad] 使用WebLoad进行Web Application 性能测试的流程
  3. 抓包软件PowerSniff开发计划
  4. Ruby on Rails 和 J2EE:两者能否共存?
  5. 委托传参,lambda
  6. 【KMP+DP】Count the string
  7. javaku快捷键
  8. codeforces 598D Igor In the Museum
  9. 10分钟弄懂javascript数组
  10. springmvc 之 DispatcherServlet
  11. Docker + Jenkins 持续部署 ASP.NET Core 项目
  12. monkey------模块组合测试
  13. [CSS] input样式定制
  14. Android版本28使用http请求报错not permitted by network security policy
  15. Gitlab用户在组中有五种权限:Guest、Reporter、Developer、Master、Owner
  16. Mac 命令行,自定义命令
  17. Quartz 定时任务设置某个时间区间每隔一定时间触发的cron表达式
  18. 【Android】3.12 兴趣点( POI)搜索功能
  19. 权限模块_整体方案说明_设计实体&amp;映射实体_实现初始化权限数据的功能
  20. 关闭layer当前弹窗

热门文章

  1. hive 操作(转)
  2. 【js】正则表达式豁然开朗
  3. 从零开始学ios开发(十一):Tab Bars和Pickers
  4. HDU3887 DFS序+ 线段树
  5. 深入理解ThreadLocal(二)
  6. UML 小结(1)- 整体阐述
  7. 20145120黄玄曦 《java程序设计》 寒假学习总结
  8. WebClient
  9. P2661 信息传递 强连通分量
  10. 使用zend studio配置Xdebug调试PHP教程