这题要求区间有多少个模K且各位数之和模K都等于0的数字。

注意到[1,231]这些数最大的各位数之和不会超过90左右,而如果K大于90那么模K的结果肯定不是0,因此K大于90就没有解。

考虑到数据规模,数据组数,这题状态这么表示:

dp[i][j][k]:位数为i模K结果为j且各位数之和模K结果为k的数字个数

然后就是转移方程,最后就是统计。。

统计部分好棘手。。。半乱搞下AC的。。还是对数位DP的这一部分太不熟悉了。

 #include<cstdio>
#include<cstring>
using namespace std;
int K,d[][][],pow[]={};
int calu(int n){
int res=,pre=,sum=;
for(int i=; i>=; --i){
if(i==) for(int j=; j<=n/pow[i]%; ++j) res+=d[i][(K-((pre*+j)*pow[i])%K)%K][(K-(sum+j)%K)%K];
else for(int j=; j<n/pow[i]%; ++j) res+=d[i][(K-((pre*+j)*pow[i])%K)%K][(K-(sum+j)%K)%K];
pre=pre*+n/pow[i]%;
sum+=n/pow[i]%;
}
return res;
}
int main(){
for(int i=; i<; ++i) pow[i]=pow[i-]*;
int t,a,b;
scanf("%d",&t);
for(int cse=; cse<=t; ++cse){
scanf("%d%d%d",&a,&b,&K);
if(K>=){
printf("Case %d: %d\n",cse,);
continue;
}
memset(d,,sizeof(d));
d[][][]=;
for(int i=; i<; ++i) ++d[][i%K][i%K];
for(int len=; len<; ++len){
for(int i=; i<K; ++i){
for(int j=; j<K; ++j){
if(d[len][i][j]==) continue;
for(int k=; k<; ++k) d[len+][(i*+k)%K][(j+k)%K]+=d[len][i][j];
}
}
}
printf("Case %d: %d\n",cse,calu(b)-calu(a-));
}
return ;
}

LightOJ1068 Investigation(数位DP)的更多相关文章

  1. light oj 1068 - Investigation 数位DP

    思路:典型的数位DP!!! dp[i][j][k]:第i位,对mod取余为j,数字和对mod取余为k. 注意:由于32位数字和小于95,所以当k>=95时,结果肯定为0. 这样数组就可以开小点, ...

  2. LightOJ 1068 Investigation (数位dp)

    problem=1068">http://www.lightoj.com/volume_showproblem.php?problem=1068 求出区间[A,B]内能被K整除且各位数 ...

  3. lightoj 1068 - Investigation(数位dp)

    An integer is divisible by 3 if the sum of its digits is also divisible by 3. For example, 3702 is d ...

  4. 【BZOJ1662】[Usaco2006 Nov]Round Numbers 圆环数 数位DP

    [BZOJ1662][Usaco2006 Nov]Round Numbers 圆环数 Description 正如你所知,奶牛们没有手指以至于不能玩"石头剪刀布"来任意地决定例如谁 ...

  5. bzoj1026数位dp

    基础的数位dp 但是ce了一发,(abs难道不是cmath里的吗?改成bits/stdc++.h就过了) #include <bits/stdc++.h> using namespace ...

  6. uva12063数位dp

    辣鸡军训毁我青春!!! 因为在军训,导致很长时间都只能看书yy题目,而不能溜到机房鏼题 于是在猫大的帮助下我发现这道习题是数位dp 然后想起之前讲dp的时候一直在补作业所以没怎么写,然后就试了试 果然 ...

  7. HDU2089 不要62[数位DP]

    不要62 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submis ...

  8. 数位DP GYM 100827 E Hill Number

    题目链接 题意:判断小于n的数字中,数位从高到低成上升再下降的趋势的数字的个数 分析:简单的数位DP,保存前一位的数字,注意临界点的处理,都是套路. #include <bits/stdc++. ...

  9. 数位dp总结

    由简单到稍微难点. 从网上搜了10到数位dp的题目,有几道还是很难想到的,前几道基本都是模板题,供入门用. 点开即可看题解. hdu3555 Bomb hdu3652 B-number hdu2089 ...

随机推荐

  1. mysql.msi安装流程

    Mysql For Windows安装图解 演示安装版本:mysql-5.5.20-win32.msi(目前是mysql for windows的最新版)安装环境:Windows Server 200 ...

  2. UIView 注意问题

    1. UIView.userInteractionEnabled UIView.userInteractionEnabled默认值是YES http://blog.csdn.net/studyreco ...

  3. string和stringstream用法总结

    参考:http://blog.csdn.net/xw20084898/article/details/21939811

  4. editorial-render A

    PROBLEM LINK: PracticeContest Author: adminTester: Kevin AtienzaEditorialist: Ajay K. VermaRussian T ...

  5. ASP.NET MVC 入门系列教程

    ASP.NET MVC 入门系列教程 博客园ASP.NET MVC 技术专题 http://kb.cnblogs.com/zt/mvc/ 一个居于ASP.NET MVC Beta的系列入门文章,有朋友 ...

  6. 【转】maven仓库快速镜像

    本文转自:http://blog.csdn.net/zuoluoboy/article/details/20007819 国内连接maven官方的仓库更新依赖库,网速一般很慢,收集一些国内快速的mav ...

  7. putty mtputty 设置utf8编码

    2013年10月30日 10:02:36 先load你指定的ip 然后选择左侧目录中的windows->translation 再在右侧选择utf-8编码 选中后,点击左侧目录中的session ...

  8. JS操作DOM

    [功能:点击按钮显示表单] <html> <head> <meta http-equiv="Content-Type" content="t ...

  9. mysql自增字段重排 或 归零

    由于删除了某些记录行,所以自增字段不连续了.重排或归零的方法:方法1:truncate table 你的表名//这样不但重新定位自增的字段,而且会将表里的数据全部删除,慎用!方法2:delete fr ...

  10. unsatisfied类型的异常

    一般为libs包下arm64-v8a,armeabi,armeabi-v7a,mips,mips64,x86,x86_64等文件夹下的.so文件丢失. 一般情况,armeabi下的so文件需要拷贝一份 ...