Uva_11361 Investigating Div-Sum Property
题意:
在[A,B]区间内找出满足条件的数有多少个。
条件:这个数本身 能够整除K, 且各位数字之和能够整除K。
思路:
数据范围过大2^31
2^31 = 2147483648 ~ 2*10^10
各位数字之和不会超过 2 + 9 * 9 = 83 , 所以 当K >= 83 时 答案为0
设F[n] 为 [0,n]区间内符合条件的数, 那么 答案就为F[B] - F[A-1].
暴力枚举O(N^2) 针对这么大的数据显然超时。
设f[i][s_mod][x_mod] 为 前i位数字确定时, 当前数(将后面未知数均视为0) 除以K 余x_mod, 各位数字之和除以K 余s_mod时的方案数
则f[i][s_mod][x_mod] = f[i - 1][(s_mod + p) % K][(x_mod * 10 + p) % K] (p = 0, 1, 2, 3, ..., 9)
代码:
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std;
#define LL long long
#define MAXN 11
int num[MAXN];
int e[MAXN];
LL f[MAXN][][];
int A, B, K, len;
void init()
{
e[] = ;
for(int i = ; i < MAXN; i ++)
e[i] = e[i-] * ;
}
LL func(int x)
{
//
memset(num, , sizeof(num));
memset(f, , sizeof(f));
int s1 = ;
int s2 = ;
for(int i = ; i >=; i --)
{
num[i] = x % ;
x /= ;
}
for(int i = ; i < ; i ++)
{
s1 = (s1 + num[i]) % K;
s2 = (s2 * + num[i]) % K;
for(int s_mod = ; s_mod < K; s_mod ++)
for(int x_mod = ; x_mod < K; x_mod ++)
for(int p = ; p < ; p ++)
f[i + ][(s_mod + p) % K][(x_mod * + p) % K] += f[i][s_mod][x_mod];
for(int j = ; j < num[i + ]; j ++)
f[i + ][(s1 + j) % K][(s2 * + j) % K] ++;
}
if((s1 + num[]) % K == && (s2 * + num[]) % K == ) ++ f[][][];
return f[][][];
} int main()
{
init();
int T;
scanf("%d",&T);
while(T--)
{
scanf("%d %d %d",&A, &B, &K);
if(K >= )
printf("0\n");
else
printf("%lld\n", func(B) - func(A - ));
}
return ;
}
Uva_11361 Investigating Div-Sum Property的更多相关文章
- Data Structure Binary Tree: Convert an arbitrary Binary Tree to a tree that holds Children Sum Property
http://www.geeksforgeeks.org/convert-an-arbitrary-binary-tree-to-a-tree-that-holds-children-sum-prop ...
- Data Structure Binary Tree: Check for Children Sum Property in a Binary Tree
http://www.geeksforgeeks.org/check-for-children-sum-property-in-a-binary-tree/ #include <iostream ...
- DOM概念的区分:Attribute和Property, html()及.text(), .val()
Attribute就是dom节点自带的属性 例如:html中常用的id.class.title.align等: <div id="immooc" title="慕课 ...
- JavaScript动态设置div的样式的方法
有时候需要根据需要动态设置div的样式,当然对于稍有经验的javascript开发者来说,这一切都是那么的简单,但是对于初学者或者说没有相关经验的开发者来说可能就是一个不大不小的难关,下面就通过实例简 ...
- Solr调研总结
http://wiki.apache.org/solr/ Solr调研总结 开发类型 全文检索相关开发 Solr版本 4.2 文件内容 本文介绍solr的功能使用及相关注意事项;主要包括以下内容:环境 ...
- solr教程,值得刚接触搜索开发人员一看
http://blog.csdn.net/awj3584/article/details/16963525 Solr调研总结 开发类型 全文检索相关开发 Solr版本 4.2 文件内容 本文介绍sol ...
- Solr总结
http://www.cnblogs.com/guozk/p/3498831.html Solr调研总结 开发类型 全文检索相关开发 Solr版本 4.2 文件内容 本文介绍solr的功能使用及相关注 ...
- 【转载】solr教程,值得刚接触搜索开发人员一看
转载:http://blog.csdn.net/awj3584/article/details/16963525 Solr调研总结 开发类型 全文检索相关开发 Solr版本 4.2 文件内容 本文介绍 ...
- Solr调研总结(转)
Solr调研总结 开发类型 全文检索相关开发 Solr版本 4.2 文件内容 本文介绍solr的功能使用及相关注意事项;主要包括以下内容:环境搭建及调试.两个核心配置文件介绍.中文分词器配置.维护索引 ...
随机推荐
- 【转】Android Studio 的小小配置
这篇博文的内容列表: 1.编辑器的字体设置 2.预览XML布局 3.导入项目 4.显示行号 5.新建Java类和Component的子类 额~~程序猿一般话都不多,嘿嘿,那咱就直接图文吧~ ^_^ ...
- JavaScript-每隔5分钟执行一次ajax请求的实现方法
个页面好像只能有一个 window.onload=function(){},所以要有多个事件,这样写就好了 window.onload=function(){ //假设这里每个五分钟执行一次test函 ...
- C# - 类型
C#是一门使用OOP技术的编程语言(Object Oriented Programming 面向对象编程)面向对象最重要的特性就是接口.继承.多态 C#中所有的事物都可以看做是一个对象 对象由类型来创 ...
- MapReduce中的Join算法
在关系型数据库中Join是非常常见的操作,各种优化手段已经到了极致.在海量数据的环境下,不可避免的也会碰到这种类型的需求,例如在数据分析时需要从不同的数据源中获取数据.不同于传统的单机模式,在分布式存 ...
- oracle数据快速删除
上文说了创建数据还原点的事,数据恢复的前提是我们在删除的时候使用了delete命令来删除,delete在删除的过程中会写日志(所以我们的数据才能够恢复),当然,写日志会导致删除速度变慢.如果我们使用t ...
- JS实现图片宽高的等比缩放
关于图片宽高的等比缩放,其实需求就是让图片自适应父容器的宽高,并且是等比缩放图片,使图片不变形. 例如,需要实现如下的效果: 要实现上面的效果,需要知道图片的宽高,父容器的宽高,然后计算缩放后的宽高. ...
- GridView分页的实现
要在GridView中加入 //实现分页 AllowPaging="true" //一页数据10行 PageSize="10" // 分页时触发的事件 OnPa ...
- <script runat=server>、<%%>和<%#%>的区别
①<script runat="server">代码段与<%%>内联代码段的区别 在asp.net页面的aspx文件中允许使用<script runa ...
- JS 定時刷新父類頁面
function timeCount() { var url = "MAC.aspx"; parent.location.href = url; } function beginC ...
- dense_rank()+hash提示改写优化SQL
数据库环境:SQL SERVER 2005 今天看到一条SQL,返回10条数据,执行了50多S.刚好有空,就对它进行了优化,优化后1S出结果. 先看下原始SQL SELECT t1.line_no , ...