UVa 11361 (计数 递推) Investigating Div-Sum Property
题意:
统计[a, b]中有多少个数字满足:自身是k的倍数,而且各个数字之和也是k的倍数。
分析:
详细分析见《训练之南》吧,=_=||
书上提出了一个模板的概念,有了模板我们就可以分块计算。
虽然书上定义f(x)表示不超过x的非负整数且满足条件的个数,但为了编码方便,代码中f(x)的含义为0~x-1中满足条件的个数。
这样最终所求为f(b+1) - f(a)
#include <bits/stdc++.h>
using namespace std; int MOD;
int pow_ten[];
int f[][][]; inline int mod(int n)
{ return ((n % MOD) + MOD) % MOD; } int F(int d, int m1, int m2)
{
if(d == ) return m1 == && m2 == ? : ;
int& ans = f[d][m1][m2];
if(ans >= ) return ans; ans = ;
for(int x = ; x <= ; x++)
ans += F(d-, mod(m1-x), mod(m2-x*pow_ten[d-]));
return ans;
} int sum(int n)
{
char digits[];
sprintf(digits, "%d", n);
int nd = strlen(digits); int base = ;
int sumd = ;
int ans = ;
for(int i = ; i < nd; i++)
{
int na = nd - i - ;
for(int d = ; d < digits[i] - ''; d++)
ans += F(na, mod(-sumd-d), mod(-base-d*pow_ten[na]));
sumd += digits[i] - '';
base += (digits[i] - '') * pow_ten[na];
}
return ans;
} int main()
{
//freopen("in.txt", "r", stdin); pow_ten[] = ;
for(int i = ; i <= ; i++) pow_ten[i] = pow_ten[i - ] * ; int T, a, b;
scanf("%d", &T);
while(T--)
{
scanf("%d%d%d", &a, &b, &MOD);
if(MOD > ) { puts(""); continue; }
memset(f, -, sizeof(f));
printf("%d\n", sum(b+) - sum(a));
} return ;
}
代码君
UVa 11361 (计数 递推) Investigating Div-Sum Property的更多相关文章
- Uva 10446【递推,dp】
UVa 10446 求(n,bcak)递归次数.自己推出来了一个式子: 其实就是这个式子,但是不知道该怎么写,怕递归写法超时.其实直接递推就好,边界条件易得C(0,back)=1.C(1,back)= ...
- UVa 10943 (数学 递推) How do you add?
将K个不超过N的非负整数加起来,使它们的和为N,一共有多少种方法. 设d(i, j)表示j个不超过i的非负整数之和为i的方法数. d(i, j) = sum{ d(k, j-1) | 0 ≤ k ≤ ...
- [Vijos1130][NOIP2001]数的计数 (递推)
自己的递推一塌糊涂 考前抱佛脚 #include<bits/stdc++.h> using namespace std; ]; int main() { int n;scanf(" ...
- UVa 10520【递推 搜索】
UVa 10520 哇!简直恶心的递推,生推了半天..感觉题不难,但是恶心,不推出来又难受..一不小心还A了[]~( ̄▽ ̄)~*,AC的猝不及防... 先递推求出f[i][1](1<=i< ...
- LA 4123 (计数 递推) Glenbow Museum
题意: 这种所有边都是垂直或水平的多边形,可以用一个字符串来表示,一个270°的内角记作O,一个90°的内角记作R. 如果多边形内存在一个点,能看到该多边形所有的点,则这个多边形对应的序列是合法的.这 ...
- UVa 557 (概率 递推) Burger
题意: 有两种汉堡给2n个孩子吃,每个孩子在吃之前要抛硬币决定吃哪一种汉堡.如果只剩一种汉堡,就不用抛硬币了. 求最后两个孩子吃到同一种汉堡的概率. 分析: 可以从反面思考,求最后两个孩子吃到不同汉堡 ...
- UVa 1645 Count (递推,数论)
题意:给定一棵 n 个结点的有根树,使得每个深度中所有结点的子结点数相同.求多棵这样的树. 析:首先这棵树是有根的,那么肯定有一个根结点,然后剩下的再看能不能再分成深度相同的子树,也就是说是不是它的约 ...
- Coin Toss(uva 10328,动态规划递推,限制条件,至少转至多,高精度)
有n张牌,求出至少有k张牌连续是正面的排列的种数.(1=<k<=n<=100) Toss is an important part of any event. When everyt ...
- UVA - 11021 - Tribles 递推概率
GRAVITATION, n.“The tendency of all bodies to approach one another with a strengthproportion to the ...
随机推荐
- SQL Server 2008之数据库大型应用解决方案总结
着互联网应用的广泛普及,海量数据的存储和访问成为了系统设计的瓶颈问题.对于一个大型的互联网应用,每天百万级甚至上亿的PV无疑对数据库造成了相当高的负载.对于系统的稳定性和扩展性造成了极大的问题. 一. ...
- Sponsored Feature: Common Performance Issues in Game Programming
转自http://www.gamasutra.com/view/feature/132084/sponsored_feature_common_.php?print=1 By Becky Heinem ...
- res/drawable目录下图片的Uri
http://liuyun025.iteye.com/blog/1280838 有时候,我们要用到res/drawable目录下的图片Uri,而这个Uri该如何生存呢?下面就是这Uri的生成方法: U ...
- HTTP 错误 404.3 - Not Found由于扩展配置问题而无法提供您请求的页面。如果该页面是脚本,请添加处理程序。如果应下载文件,请添加 MIME 映射
出现此错误可能是在安装IIS服务器的时候没有勾选“应用程序开发”, 解决方法如下: 就像安装IIS一样的步骤. 选择web服务器(IIS)后,再选择“应用程序开发” 选择asp.net 以及 服务 ...
- Codeforces Round #352 (Div. 2) D. Robin Hood
题目链接: http://codeforces.com/contest/672/problem/D 题意: 给你一个数组,每次操作,最大数减一,最小数加一,如果最大数减一之后比最小数加一之后要小,则取 ...
- IntelliJ IDEA 调试小记
一.IntelliJ IDEA 调试没有F6 Eclipse调试有F6,意为下一步,递增F8.可IntelliJ IDEA 调试没有这个. 二.图解 Step Over (F8): 下一步 (相当于E ...
- C# IL DASM 使用
IL DASM反编译工具 使用C#的猿人或多或少都会对微软的IL反编译工具(ildasm.exe)有所认识.我最早接触到这工具是公司同事使用他反编译exe程序,进行研读和修改.感觉他还是很强大. IL ...
- 关于在js中使用csstext的问题
会将前边所设置的css属性全部清空,慎用!
- linux vi修改后如何保存
linux vi修改后如何保存 按ESC键去到命令模式,然后: :w?? 保存文件但不退出vi :w file 将修改另外保存到file中,不退出vi :w! 强制保存,不推出vi :wq 保存文件并 ...
- Network Saboteur(Rand版)
poj2531:http://poj.org/problem?id=2531 题意:给你一个图,图中点之间会有边权,现在问题是把图分成两部分,使得两部分之间边权之和最大.题解:随机算法 #includ ...