LightOJ1068 Investigation(数位DP)
这题要求区间有多少个模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)的更多相关文章
- light oj 1068 - Investigation 数位DP
思路:典型的数位DP!!! dp[i][j][k]:第i位,对mod取余为j,数字和对mod取余为k. 注意:由于32位数字和小于95,所以当k>=95时,结果肯定为0. 这样数组就可以开小点, ...
- LightOJ 1068 Investigation (数位dp)
problem=1068">http://www.lightoj.com/volume_showproblem.php?problem=1068 求出区间[A,B]内能被K整除且各位数 ...
- 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 ...
- 【BZOJ1662】[Usaco2006 Nov]Round Numbers 圆环数 数位DP
[BZOJ1662][Usaco2006 Nov]Round Numbers 圆环数 Description 正如你所知,奶牛们没有手指以至于不能玩"石头剪刀布"来任意地决定例如谁 ...
- bzoj1026数位dp
基础的数位dp 但是ce了一发,(abs难道不是cmath里的吗?改成bits/stdc++.h就过了) #include <bits/stdc++.h> using namespace ...
- uva12063数位dp
辣鸡军训毁我青春!!! 因为在军训,导致很长时间都只能看书yy题目,而不能溜到机房鏼题 于是在猫大的帮助下我发现这道习题是数位dp 然后想起之前讲dp的时候一直在补作业所以没怎么写,然后就试了试 果然 ...
- HDU2089 不要62[数位DP]
不要62 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submis ...
- 数位DP GYM 100827 E Hill Number
题目链接 题意:判断小于n的数字中,数位从高到低成上升再下降的趋势的数字的个数 分析:简单的数位DP,保存前一位的数字,注意临界点的处理,都是套路. #include <bits/stdc++. ...
- 数位dp总结
由简单到稍微难点. 从网上搜了10到数位dp的题目,有几道还是很难想到的,前几道基本都是模板题,供入门用. 点开即可看题解. hdu3555 Bomb hdu3652 B-number hdu2089 ...
随机推荐
- ios反射
http://www.cr173.com/html/18677_1.html 1.反射获取类属性名和属性类型 unsigned ; objc_property_t *properties = clas ...
- why we use Symbols in Hash
Rather than using Strings as the keys in a Hash, it’s better practice to use Symbols. Symbols are ju ...
- facedetect
继续学习大神的博文http://www.cnblogs.com/tornadomeet/archive/2012/03/22/2411318.html
- nginx学习(二):初识配置文件
nginx的配置文件默认在nginx安装目录中的conf子目录中,主配置文件为nginx.conf, root@mgmserver conf]# pwd/usr/local/nginx/conf一.配 ...
- twisted udp编程
概述 Unlike TCP, UDP has no notion of connections. A UDP socket can receive datagrams from any server ...
- 为nginx增加nginx_http_concat模块
为nginx增加nginx_http_concat模块 时间 2013-06-05 22:14:56 我行我思 原文 http://www.fanjun.me/?p=562 主题 Nginx 缘由 ...
- Sublime Text 2 入门及技巧
看了 Nettuts+ 对 Sublime Text 2 的介绍, 立刻就兴奋了,诚如作者 Jeffrey Way 所说:“<永远的毁灭公爵>都发布了,TextMate 2 还没发”,你还 ...
- JavaScript String 对象方法
String 对象方法 方法 描述 anchor() 创建 HTML 锚. big() 用大号字体显示字符串. blink() 显示闪动字符串. bold() 使用粗体显示字符串. charAt() ...
- 【转】Apache Solr 访问权限控制
本文转自:http://www.cnblogs.com/ibook360/archive/2011/11/07/2239247.html 在Tomcat6增加 Solr的访问权限方法如下: 编辑tom ...
- iOS __block类型变量作用域
看下图 在c语言中,2个独立的函数是不可能互相访问局部变量的,但是__block提供了这个功能,它不单单能读变量,还可以对变量进行写!上图说明,block获得了i最后的真实值5,没有只取得0,这都是& ...