月之谜 (mystery.pas/c/cpp)

【题目描述】

打败了 Lord lsp 之后,由于 lqr 是一个心地善良的女孩子,她想净化 Lord lsp 黑化的心,使他变回到原来那个天然呆的 lsp……

在光之英雄 applepi 的指引下,lqr 来到了月之泉。月之泉的精灵告诉她,想要净化 Lord lsp 的话,就要解出月之泉的谜题。

具体地来说是这样的,定义月之数为能够被其十进制表示下各个数位的和整除的数。

给定整数 L,R,你需要计算出区间[L, R]中有多少个月之数。

lqr 发觉这不是数学竞赛能够解决的问题,于是她又找到了你……所以说你需要帮助她解决这个问题。

【输入格式】

输入文件包含多个测试数据。

每组测试数据占一行,含有两个整数 L 和 R。

输入文件以 EOF 结束。

【输出格式】

对于每组测试数据,在单独的一行内输出结果。

【样例输入】

1 100

101 200

【样例输出】

33

26

【数据范围与约定】

对于 20% 的数据,1≤L,R≤1000。

对于 100% 的数据,1≤L,R≤2 31 -1。

每个输入文件的测试数据不超过 3000 组。

——————————————我是分割线————————————————————

好题,数位统计DP
这就是著名的数位统计DP,首先把问题转化为calc(1,R)-calc(1,L-1)
一般解题思路是:先DP预处理、再从高到低按位填数
一旦填了一个比上限小的数位,就可以立即通过DP预处理出的值累加答案

f[模][剩余数字数目][剩余数字的和][剩余位的模]=合法方案数
f[S][i][j][k]=∑(f[S][i-1][j-R][(k-pwr[i-1]*R)%S], 0≤R≤9)
边界条件:F[S][0][0][0]=1
【代码】

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<cstring>
 4 #include<cmath>
 5 #include<algorithm>
 6 #include<queue>
 7 #include<cstdlib>
 8 #include<iomanip>
 9 #include<cassert>
10 #include<climits>
11 #define maxn 1000001
12 #define F(i,j,k) for(int i=j;i<=k;i++)
13 #define M(a,b) memset(a,b,sizeof(a))
14 #define FF(i,j,k) for(int i=j;i>=k;i--)
15 #define inf 0x7fffffff
16 using namespace std;
17 int read(){
18     int x=0,f=1;char ch=getchar();
19     while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
20     while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}
21     return x*f;
22 }
23 int n,m;
24 int f[82][10][82][82],pwr[82][10];;
25 int sum,L,R;
26 int num[10];
27 inline int modabs (int a, int mod)
28 {
29     return ((a % mod)+mod)%mod;
30 }
31 int run(int p,int sum,int mod,int s,bool e)
32 {
33     int a,b;
34     if(s-sum<0) return 0;
35     else if(!e) return f[s][p+1][s-sum][(s-mod)%s];
36     else if(p==-1)
37     {
38         if(sum==s&&mod==0) return 1;
39         else return 0;
40     }
41     else
42     {
43         int res=0;
44     F(d,0,num[p])
45     {
46         res+=run(p-1,sum+d,(mod+pwr[s][p]*d)%s,s,d==num[p]);
47     }
48     return res;
49     }
50 }
51 int fcount(int t)
52 {
53     int a,b;
54     if(t==0) return 0;
55     int maxx=0;
56     while(t){
57         num[maxx++]=t%10;
58         t/=10;
59     }
60     int res=0;
61     F(i,1,81) res+=run(maxx-1,0,0,i,true);
62     return res;
63 }
64 int main()
65 {
66     std::ios::sync_with_stdio(false);//cout<<setiosflags(ios::fixed)<<setprecision(1)<<y;
67     #ifdef LOCAL
68     freopen("data.in","r",stdin);
69     freopen("data.out","w",stdout);
70     #endif
71     F(s,1,81)
72     {
73         M(f[s],0);
74         f[s][0][0][0]=1;
75         pwr[s][0]=1%s;
76         F(i,1,9) pwr[s][i]=(pwr[s][i-1]*10)%s;
77         F(i,1,9)F(j,0,i*9)F(k,0,s)for(int d=0;d<=9&&j-d>=0;d++)
78         {
79             f[s][i][j][k]+=f[s][i-1][j-d][modabs(k-pwr[s][i-1]*d,s)];
80         }
81     }
82     while(cin>>L>>R)
83     {
84         cout<<fcount(R)-fcount(L-1)<<endl;
85     }
86     return 0;
87 }

Nescafé2 月之谜

转载于:https://www.cnblogs.com/SBSOI/p/5642546.html

Nescafé2 月之谜 题解相关推荐

  1. ACwing 311. 月之谜 数位dp

    题意:问你[l,r]内有多少数,是可以被其数位和整除的. 思路: 思路:直观想法,用dp[pos][sum1][sum2]dp[pos][sum1][sum2]dp[pos][sum1][sum2], ...

  2. 2020年ACM团队新生第一次周赛题解

    A.王学姐去上学啦 二分法的模板题,大家先点下面的链接学习一下二分法. https://www.cnblogs.com/cs-whut/p/11212022.html 这是我一年前(整整一年,2019 ...

  3. 《算法竞赛进阶指南》 0x50 动态规划

    题目后面加 ∗*∗ 表示题目过于简单或不具备特征性,不做题解 线性DP AcWing 271. 杨老师的照相排列 811人打卡 AcWing 272. 最长公共上升子序列 778人打卡(∗*∗) Ac ...

  4. Dairy?Diary!

    2019/9/20 既来之则安之.没什么好惆怅好难过的. 竞赛本来就是你现在的任务重心 这样的安排也可以为你提供更多的学习时间 你不是总闹着时间不够用吗 现在就好啦,你可以抓紧时间搞了 每周六8:00 ...

  5. IDEA中JSP乱码问题解谜

    HTML是HEAD头判断编码,需要在head添加配置. <meta http-equiv="content-type" content="text/html;cha ...

  6. 西南民族大学第十届校赛(同步赛) 个人笔记 题解

    题目链接:https://ac.nowcoder.com/acm/contest/322#question 先来一波官方题解 作者:兔子韩 链接:https://ac.nowcoder.com/dis ...

  7. 几款最新的解谜单机小游戏

    2019独角兽企业重金招聘Python工程师标准>>> 找到几款新出的解谜类小游戏分享一下. 美女餐厅侦探社 游戏简介     "餐厅小镇"的众多商铺中也会发生一 ...

  8. 【9018题解】2109 卡德加的兔子

    题目描述 卡德加有N个兔子笼,编号从1~N.刚开始每个兔子笼里有1对小兔,每个月小兔会长成大兔,之后的每个月这对大兔都会生出1对小兔.即兔子的繁殖遵循斐波那契数列的规律. 例如:第一个月1对小兔,第二 ...

  9. TYUT-A2专题题解

    TYUT-A2专题题解 循序渐进,基础练起. 01递推与组合 HDU1210 Eddy's 洗牌问题[递推函数+模拟] - 海岛Blog - CSDN博客 HDU2044 一只小蜜蜂...[递推] - ...

  10. TYUT-A专题题解(一)

    TYUT-A专题题解(一) 01A Ad Hoc UVA353 LA5247 Pesky Palindromes[回文] - 海岛Blog - CSDN博客 UVA947 Master Mind He ...

最新文章

  1. 虚拟机红帽linux登陆密码,[操作系统]vmware虚拟机安装了linux(redhat)系统忘记登录密码怎么办...
  2. 【OpenGL】十五、OpenGL 绘制三角形 ( 绘制 GL_TRIANGLE_FAN 三角形扇 )
  3. 使用类计算矩形的面积
  4. java基本语法——常量、变量、数据类型
  5. 利用Chrome的Heap Snapshot功能分析一个时间段内的内存占用率
  6. 让使用SQLite的.NET应用自适应32位/64位系统
  7. 怎么查询共享使用人_企业微信微盘怎么共享使用?企业微信如何设置微盘权限?...
  8. C#获取屏幕大小的“简单整理”。。
  9. C语言open()函数:打开文件函数(转)
  10. Surprise 使用本地数据
  11. Java 反射常用方法
  12. openwrt的源码下载及其编译 (一)
  13. java覆盖的概念_java中覆盖是什么意思?java方法覆盖的概念详解
  14. 基于ABP实现DDD
  15. 【自动化测试】Web自动化测试框架01
  16. CA(电子签名)与HIS等医疗信息化系统的集成简介
  17. 基于Java+SpringBoot+Thymeleaf+Mysql在线教育视频点播学习系统设计与实现
  18. 25年持续创新的奥秘:解读亚马逊的创新DNA
  19. Could not find artifact com.dingtalk.api:top-api-sdk-dev:pom:ding-open-mc-SNAPSHOT in aliyunmaven
  20. 查找计算机型号,怎样查看电脑型号

热门文章

  1. 非法吸收公众存款罪的6大无罪辩点(根据无罪判例提炼)
  2. win7局域网计算机无法访问,win7局域网不能访问怎么办_win7系统电脑无法访问局域网怎么办-win7之家...
  3. 计算机游戏cpu,2021年11代酷睿cpu游戏电脑配置推荐(可装win7系统)
  4. office新建word excel ppt时,图标显示异常的问题
  5. 最简单易懂的ios p12证书 和描述文件的创建,IPA上传,最完整的ios上架苹果商店教程
  6. 项目上线工作流程梳理
  7. c语言获取windows路径,获取Windows/System/Temp目录路径
  8. 【学点心理学】八本值得反复阅读的心理类书籍推荐
  9. 数据读取的常见函数以及区别(fopen、open、textscan、fwrite、fread函数)
  10. INSERT INTO SELECT FROM 的用法