Nescafé2 月之谜 题解
月之谜 (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 月之谜 题解相关推荐
- ACwing 311. 月之谜 数位dp
题意:问你[l,r]内有多少数,是可以被其数位和整除的. 思路: 思路:直观想法,用dp[pos][sum1][sum2]dp[pos][sum1][sum2]dp[pos][sum1][sum2], ...
- 2020年ACM团队新生第一次周赛题解
A.王学姐去上学啦 二分法的模板题,大家先点下面的链接学习一下二分法. https://www.cnblogs.com/cs-whut/p/11212022.html 这是我一年前(整整一年,2019 ...
- 《算法竞赛进阶指南》 0x50 动态规划
题目后面加 ∗*∗ 表示题目过于简单或不具备特征性,不做题解 线性DP AcWing 271. 杨老师的照相排列 811人打卡 AcWing 272. 最长公共上升子序列 778人打卡(∗*∗) Ac ...
- Dairy?Diary!
2019/9/20 既来之则安之.没什么好惆怅好难过的. 竞赛本来就是你现在的任务重心 这样的安排也可以为你提供更多的学习时间 你不是总闹着时间不够用吗 现在就好啦,你可以抓紧时间搞了 每周六8:00 ...
- IDEA中JSP乱码问题解谜
HTML是HEAD头判断编码,需要在head添加配置. <meta http-equiv="content-type" content="text/html;cha ...
- 西南民族大学第十届校赛(同步赛) 个人笔记 题解
题目链接:https://ac.nowcoder.com/acm/contest/322#question 先来一波官方题解 作者:兔子韩 链接:https://ac.nowcoder.com/dis ...
- 几款最新的解谜单机小游戏
2019独角兽企业重金招聘Python工程师标准>>> 找到几款新出的解谜类小游戏分享一下. 美女餐厅侦探社 游戏简介 "餐厅小镇"的众多商铺中也会发生一 ...
- 【9018题解】2109 卡德加的兔子
题目描述 卡德加有N个兔子笼,编号从1~N.刚开始每个兔子笼里有1对小兔,每个月小兔会长成大兔,之后的每个月这对大兔都会生出1对小兔.即兔子的繁殖遵循斐波那契数列的规律. 例如:第一个月1对小兔,第二 ...
- TYUT-A2专题题解
TYUT-A2专题题解 循序渐进,基础练起. 01递推与组合 HDU1210 Eddy's 洗牌问题[递推函数+模拟] - 海岛Blog - CSDN博客 HDU2044 一只小蜜蜂...[递推] - ...
- TYUT-A专题题解(一)
TYUT-A专题题解(一) 01A Ad Hoc UVA353 LA5247 Pesky Palindromes[回文] - 海岛Blog - CSDN博客 UVA947 Master Mind He ...
最新文章
- 虚拟机红帽linux登陆密码,[操作系统]vmware虚拟机安装了linux(redhat)系统忘记登录密码怎么办...
- 【OpenGL】十五、OpenGL 绘制三角形 ( 绘制 GL_TRIANGLE_FAN 三角形扇 )
- 使用类计算矩形的面积
- java基本语法——常量、变量、数据类型
- 利用Chrome的Heap Snapshot功能分析一个时间段内的内存占用率
- 让使用SQLite的.NET应用自适应32位/64位系统
- 怎么查询共享使用人_企业微信微盘怎么共享使用?企业微信如何设置微盘权限?...
- C#获取屏幕大小的“简单整理”。。
- C语言open()函数:打开文件函数(转)
- Surprise 使用本地数据
- Java 反射常用方法
- openwrt的源码下载及其编译 (一)
- java覆盖的概念_java中覆盖是什么意思?java方法覆盖的概念详解
- 基于ABP实现DDD
- 【自动化测试】Web自动化测试框架01
- CA(电子签名)与HIS等医疗信息化系统的集成简介
- 基于Java+SpringBoot+Thymeleaf+Mysql在线教育视频点播学习系统设计与实现
- 25年持续创新的奥秘:解读亚马逊的创新DNA
- Could not find artifact com.dingtalk.api:top-api-sdk-dev:pom:ding-open-mc-SNAPSHOT in aliyunmaven
- 查找计算机型号,怎样查看电脑型号
热门文章
- 非法吸收公众存款罪的6大无罪辩点(根据无罪判例提炼)
- win7局域网计算机无法访问,win7局域网不能访问怎么办_win7系统电脑无法访问局域网怎么办-win7之家...
- 计算机游戏cpu,2021年11代酷睿cpu游戏电脑配置推荐(可装win7系统)
- office新建word excel ppt时,图标显示异常的问题
- 最简单易懂的ios p12证书 和描述文件的创建,IPA上传,最完整的ios上架苹果商店教程
- 项目上线工作流程梳理
- c语言获取windows路径,获取Windows/System/Temp目录路径
- 【学点心理学】八本值得反复阅读的心理类书籍推荐
- 数据读取的常见函数以及区别(fopen、open、textscan、fwrite、fread函数)
- INSERT INTO SELECT FROM 的用法