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)

代码:

  

 1 #include <cstdio>
 2 #include <cstring>
 3 #include <iostream>
 4 #include <algorithm>
 5 using namespace std;
 6 #define LL long long
 7 #define MAXN 11
 8 int num[MAXN];
 9 int e[MAXN];
10 LL f[MAXN][100][100];
11 int A, B, K, len;
12 void init()
13 {
14     e[0] = 1;
15     for(int i = 1; i < MAXN; i ++)
16         e[i] = e[i-1] * 10;
17 }
18 LL func(int x)
19 {
20     //
21     memset(num, 0, sizeof(num));
22     memset(f, 0, sizeof(f));
23     int s1 = 0;
24     int s2 = 0;
25     for(int i = 10; i >=0; i --)
26     {
27         num[i] = x % 10;
28         x /= 10;
29     }
30     for(int  i = 0; i < 10; i ++)
31     {
32         s1 = (s1 + num[i]) % K;
33         s2 = (s2 * 10 + num[i]) % K;
34         for(int s_mod = 0; s_mod < K; s_mod ++)
35             for(int x_mod = 0; x_mod < K; x_mod ++)
36                 for(int p = 0; p < 10; p ++)
37                     f[i + 1][(s_mod + p) % K][(x_mod * 10 + p) % K] += f[i][s_mod][x_mod];
38         for(int j = 0; j < num[i + 1]; j ++)
39             f[i + 1][(s1 + j) % K][(s2 * 10 + j) % K] ++;
40     }
41     if((s1 + num[10]) % K == 0 && (s2 * 10 + num[10]) % K == 0) ++ f[10][0][0];
42     return f[10][0][0];
43 }
44
45 int main()
46 {
47     init();
48     int T;
49     scanf("%d",&T);
50     while(T--)
51     {
52         scanf("%d %d %d",&A, &B, &K);
53         if(K >= 83)
54             printf("0\n");
55         else
56             printf("%lld\n", func(B) - func(A - 1));
57     }
58     return 0;
59 }

时间: 2024-10-12 21:35:51

Uva_11361 Investigating Div-Sum Property的相关文章

Solr调研总结(转)

Solr调研总结 开发类型 全文检索相关开发 Solr版本 4.2 文件内容 本文介绍solr的功能使用及相关注意事项;主要包括以下内容:环境搭建及调试.两个核心配置文件介绍.中文分词器配置.维护索引.查询索引,高亮显示.拼写检查.搜索建议.分组统计.自动聚类.相似匹配.拼音检索等功能的使用方法. 在代码文本框中如有显示不全的,请在文本框中按Ctrl+A再复制. 版本 作者/修改人 日期 V1.0 gzk 2013-06-04 1. Solr 是什么? Solr它是一种开放源码的.基于 Luce

SolrCloud部署和使用手册

SolrCloud部署和使用手册             文档修订摘要   日期 版本 描述 著者 审阅者 2013-12-23 0.1 将txt简易模板的文档提取到word模板. 张乐雷 2013-12-23 0.2 创建collection的url中制定了createNodeSet 张乐雷 2013-12-29 0.3 1.  solr.war直接使用solr发布的文件,不在进行修改. 2.  日志jar和配置放置到tomcat/lib目录 3.  新增维护document的命令,提供了不同

solr教程,值得刚接触搜索开发人员一看

Solr调研总结 开发类型 全文检索相关开发 Solr版本 4.2 文件内容 本文介绍solr的功能使用及相关注意事项;主要包括以下内容:环境搭建及调试;两个核心配置文件介绍;维护索引;查询索引,和在查询中可以应用的高亮显示.拼写检查.搜索建议.分组统计.拼音检索等功能的使用方法. 版本 作者/修改人 日期 V1.0 gzk 2013-06-04       1. Solr 是什么? Solr它是一种开放源码的.基于 Lucene Java 的搜索服务器,易于加入到 Web 应用程序中.Solr

solr入门教程-较详细

Solr调研总结 开发类型 全文检索相关开发 Solr版本 4.2 文件内容 本文介绍solr的功能使用及相关注意事项;主要包括以下内容:环境搭建及调试;两个核心配置文件介绍;维护索引;查询索引,和在查询中可以应用的高亮显示.拼写检查.搜索建议.分组统计.拼音检索等功能的使用方法. 版本 作者/修改人 日期 V1.0 gzk 2013-06-04       1. Solr 是什么? Solr它是一种开放源码的.基于 Lucene Java 的搜索服务器,易于加入到 Web 应用程序中.Solr

[NOIP2012提高组]国王旅行

题目:洛谷P1080.Vijos P1779. 题目大意:国王和每个大臣左.右手各写了一个数.规定每个大臣得到的金币数为他前面所有人左手的数字的乘积除以他自己右手的数(向下取整),现在国王要改变大臣的排列顺序,使得获得奖赏最多的大臣,所获奖赏尽可能的少(国王永远站在最前面). 解题思路:(贪心)首先,交换相邻两个大臣只会对这两个大臣造成影响,并不会对其他大臣造成影响. 我们考虑大臣i和i+1,设他们左手数字分别为A[i]和A[i+1],右手分别为B[i]和B[i+1],前i-1个大臣和国王左手的

solr入门教程

Solr 本文介绍solr的功能使用及相关注意事项;主要包括以下内容:环境搭建及调试;两个核心配置文件介绍;维护索引;查询索引,和在查询中可以应用的高亮显示.拼写检查.搜索建议.分组统计.拼音检索等功能的使用方法. 1. Solr 是什么? Solr它是一种开放源码的.基于 Lucene Java 的搜索服务器,易于加入到 Web 应用程序中.Solr 提供了层面搜索(就是统计).命中醒目显示并且支持多种输出格式(包括XML/XSLT 和JSON等格式).它易于安装和配置,而且附带了一个基于HT

vue-lazy-render: 延迟渲染大组件,增强页面切换流畅度

最近用element来做项目,在开发的过程中,突然发现页面的操作和切换在数据量大的时候相当卡,后来提了个issue,在furybean解答后才知道,我每个单元格都加了tooltip,会生成大量的节点,造成页面操作卡顿.后来将tooltip去掉,操作流畅多了. 但是,由于我是将页面的数据存在vuex中的,在路由切换回来的时候,发现在数据量大的时候,页面渲染得很慢,大概两三秒才能切换过来,用户体验相当不好. 这时,我就在想,能不能让页面切换完成之后才开始渲染数据量大的组件,用户起码不会感知到路由切换

在Xcode中使用Git进行源码版本控制

在应用程序开发过程中,很重要的一部分工作就是如何进行源码的版本控制.当代码出现问题时,我们就需要将代码恢复到原先正常的版本.如果是多个人共同开发一个项目,那么代码的控制就会非常复杂.幸运的是,开发者不需要自己控制这些,因为有专门的软件来负责,叫做版本控制系统. 版本控制系统,或者说修改控制系统,实际上是一种检测源文件的改变并将其保存留作以后参考使用的机制(软件).此外,它还能记录其他有用信息,比如是哪个开发者修改了代码,何时修改的,修改了哪一部分,以及其他历史信息.版本控制系统可以比较不同版本代

随机加减乘除运算器

/** 随机加减乘除运算器,要求如下:程序依次出 10 道题目,由用户输入题目的答案.用户 每答完一道题,由系统提示结果:答错了或者答对了.10 道题目答完之后,系统计算得分 并输出.如果用户希望提前结束,则可以输入-1提前退出. /** 随机加减乘除运算器,要求如下:程序依次出 10 道题目,由用户输入题目的答案.用户 每答完一道题,由系统提示结果:答错了或者答对了.10 道题目答完之后,系统计算得分 并输出.如果用户希望提前结束,则可以输入-1提前退出. ------------------