题目

看起来就像是数位\(\rm dp\)

不妨从竖式乘法的角度来考虑这个问题

为了方便处理进位,我们得从低位向高位填数

设\(dp[i][0/1][j][p][t]\)表示填到了第\(i\)位,卡不卡上界,\(f(x)=j\),\(f(k\times x)=p\)(不计算最高位),需要向最高位进\(t\)的\(x\)有多少个

这里的卡上界比较奇怪,如果这一位上填的数大于\(R\)这一位上的数,那么就一定卡了上界,如果小于这一位上的数,那么就一定不卡上界,如果和原来的数相等,那么就继续之前的状态

所以这个\(0/1\)就表示后面的\(i\)为和\(R\)后\(i\)位的大小关系,如果填的数大于\(R\)后\(i\)为,那么这个状态就是\(1\);否则就是\(0\)

至于转移,就比较简单,我们枚举这一位上填什么数\(y\),那么对于\(x\),数位和增加了\(y\),对于\(k\times x\),这一位上直接来一个乘法是\(k\times y\),还有之前的进位\(t\),于是就是\((k\times y+t)\% 10\),新的进位就是\((k\times y+t)/10\)

但是这样我们填到\(R\)的最高位之后可能还有一些进位没有处理,于是再往前多处理\(3\)位把进位处理完

最后的答案就是\(\sum_{i}dp[\lg_{R}][0][i][i][0]\),即\(x\)的数位和等于\(f(k\times x)\)的情况,但是这样多了一维非常难受,考虑的最后只要求\(j=p\),所以我们直接把\(j-p\)看成一维状态就好了

代码

#include<bits/stdc++.h>
#define re register
#define LL long long
LL dp[25][2][1000][500];
int m,w,a[25],M=250;LL n;
inline void split(LL x) {
while(x) a[++w]=(x%10),x/=10;
}
int main() {
scanf("%lld%d",&n,&m);
dp[0][0][0][M]=1;
split(n);
for(re int i=0;i<w+3;i++)
for(re int j=0;j<2;++j)
for(re int k=0;k<1000;++k)
for(re int p=M-2*i*9;p<=M+2*i*9;++p) {
if(!dp[i][j][k][p]) continue;
for(re int t=0;t<10;++t)
dp[i+1][t==a[i+1]?j:t>a[i+1]][(k+t*m)/10][p+t-(k+t*m)%10]+=dp[i][j][k][p];
}
printf("%lld\n",dp[w+3][0][0][M]-1);
return 0;
}

uoj140 【UER #4】被粉碎的数字的更多相关文章

  1. [UOJ #140]【UER #4】被粉碎的数字

    题目大意:定义$f(x)$为数字$x$每一位数字的和,求$\sum\limits_{i=1}^R[f(x)=f(kx)]$.$R\leqslant10^{18},k\leqslant10^3$ 题解: ...

  2. C语言 · 判定数字

    编写函数,判断某个给定字符是否为数字. 样例输入 9 样例输出 yes #include<stdio.h> int main(){ char c; scanf("%c" ...

  3. excel 日期/数字格式不生效需要但双击才会生效的解决办法

    原因: Excel2007设置过单元格格式后,并不能立即生效必须挨个双击单元格,才能生效.数据行很多.效率太低. 原因:主要是一些从网上拷贝过来的日期或数字excel默认为文本格式或特殊-中文数字格式 ...

  4. JavaScript求两个数字之间所有数字的和

    这是在fcc上的中级算法中的第一题,拉出来的原因并不是因为有什么好说的,而是我刚看时以为是求两个数字的和, 很显然错了.我感觉自己的文字理解能力被严重鄙视了- -.故拉出来折腾折腾. 要求: 给你一个 ...

  5. Xamarin Android 应用程序内图标上数字提示

    最近在用 Xamarin 做一个 Android 应用,打开应用时,如果有新消息,需要在应用内的 Toolbar 或者首页的图标上显示数字提示.在这里和大家分享一下实现方法,如果你有更新好的实现方法, ...

  6. C# WinForm使用乐器数字接口

    继续,前面已经实现了C#调用Windows API实现了弹出对话框功能.使用了User32.dll文件,主要代码如下: [DllImport("User32.dll")]publi ...

  7. 04实现累加和计算功能并且实现textbox不允许输入数字以外的字符但不包括退格键同时不允许第一个数值为0

    private void button1_Click(object sender, EventArgs e) { double number1, number2; if (double.TryPars ...

  8. js验证输入的是否是数字,小数保留几位小数

    1.验证方法 validationNumber(e, num)  e代表标签对象,num代表保留小数位数 function validationNumber(e, num) { -]+\.?[-]*$ ...

  9. 原生js可爱糖果数字时间特效

    效果展示:http://hovertree.com/texiao/js/35/ 数字采用漂亮的糖果皮肤设计 效果图: 代码如下: <!DOCTYPE html> <html> ...

随机推荐

  1. GitHub 万星推荐:黑客成长技术清单

    GitHub 万星推荐:黑客成长技术清单 导语:如果你需要一些安全入门引导,“Awesome Hacking”无疑是最佳选择之一. 最近两天,在reddit安全板块和Twitter上有个GitHub项 ...

  2. robotframework 时间控件的操作的几种方法总结。

  3. Java-Class-FC:java.lang.StringBuilder

    ylbtech-Java-Class-FC:java.lang.StringBuilder 1.返回顶部   2.返回顶部 1. @Override public String toString() ...

  4. eclipse的快捷键(常用)

    ctrl+shift+r 全局查找java类 ctrl +h       全局查找包含某某内容的文件位置 ctrl +alt+h  右击方法名 选择open call hierarchy

  5. 4种XML解析器

    <?xml version="1.0" encoding="UTF-8"?> <Result> <VALUE> <NO ...

  6. springMVC整合swagger(亲自试验完全可用)

    swagger是什么: [plain] view plain copy Swagger 是一款RESTFUL接口的文档在线自动生成+功能测试功能软件.本文简单介绍了在项目中集成swagger的方法和一 ...

  7. hexo next博客之无敌之舒服之美妙之轻松之发布博客(mweb,github自主开发插件)

    文章目录 **前言:** 具体用法 **mweb for mac** 注意 **github插件下载** 个人博客:https://mmmmmm.me 源码:https://github.com/da ...

  8. pymongo中使用聚合查询

    在使用mongo数据库时,简单的查询基本上可以满足大多数的业务场景,但是试想一下,如果要统计某一荐在指定的数据中出现了多少次该怎么查询呢?笨的方法是使用find 将数据查询出来,再使用count() ...

  9. 人人开源打包jar

    先在renren-security执行mvn clean install 再到renren-admin目录下,执行mvn clean package,就可以打成renren-admin.jar 如果想 ...

  10. java MySQl数据库连接

    <%@ page import="java.sql.Connection" %> <%@ page import="java.sql.DriverMan ...