CF 1073 E. Segment Sum
https://codeforces.com/problemset/problem/1073/E
题意:[l,r]中,出现0—9数字的种类数不超过k的数的和
dp[i][j][0/1] 表示 dfs到第i位以后,数字出现的情况状态为j能转移的状态,是否有上界限制的数字的和
f[i][j] 表示 dfs到第i位以后,数字出现的情况状态为j能转移的状态,没有上界限制的数字的个数
枚举这一位填什么
加上这一位的贡献,加上填上这一位之后后面数的贡献
数字出现状态:若i出现过,则状态j的第i位二进制位为1
#include<cstdio>
#include<cstring> using namespace std; typedef long long LL; const int mod=; int dp[][(<<)+][],f[][(<<)+];
int ans,m;
int a[],pow10[];
bool va[(<<)+]; int k; LL dfs(int dep,int s,int lim,bool zero)
{
if(!va[s]) return ;
if(!lim && f[dep][s]!=-) return f[dep][s];
if(!dep) return ;
int up=lim ? a[dep] : ,nl,news,tmp;
int sum=;
for(int i=;i<=up;++i)
{
if(zero && !i) news=;
else news=s|<<i;
nl=lim && a[dep]==i;
tmp=dfs(dep-,news,nl,zero && !i);
dp[dep][s][lim]+=1ll*tmp*i%mod*pow10[dep-]%mod;
dp[dep][s][lim]%=mod;
dp[dep][s][lim]+=dp[dep-][news][nl];
dp[dep][s][lim]%=mod;
sum+=tmp;
sum%=mod;
}
if(!lim) f[dep][s]=sum;
return sum;
} void solve(long long n,int ty)
{
int len=;
while(n) a[++len]=n%,n/=;
memset(f,-,sizeof(f));
memset(dp,,sizeof(dp));
dfs(len,,,);
ans+=ty*dp[len][][];
ans%=mod;
if(ans<) ans+=mod;
} bool check(int s)
{
int p=;
for(int i=;i<=;++i)
if(s&<<i) p++;
if(p<=k) return ;
else return ;
} int main()
{
LL l,r;
scanf("%lld%lld%d",&l,&r,&k);
pow10[]=;
for(int i=;i<;++i) pow10[i]=1ll*pow10[i-]*%mod;
m=<<;
for(int i=;i<m;++i) va[i]=check(i);
solve(r,);
solve(l-,-);
printf("%d",ans);
}
CF 1073 E. Segment Sum的更多相关文章
- Codeforces 1073 E - Segment Sum
E - Segment Sum 思路: 数位dp 我们平时做的数位dp都是求满足条件的数的个数, 这里要求满足条件的数的和 只要在原来的基础上求每一位的贡献就可以了,所以传参数时要传两个 代码: #p ...
- CF1073E Segment Sum 解题报告
CF1073E Segment Sum 题意翻译 给定\(K,L,R\),求\(L~R\)之间最多不包含超过\(K\)个数码的数的和. \(K\le 10,L,R\le 10^{18}\) 数位dp ...
- CF1073E Segment Sum 自闭了
CF1073E Segment Sum 题意翻译 给定\(K,L,R\),求\(L\)~\(R\)之间最多不包含超过\(K\)个数码的数的和. \(K<=10,L,R<=1e18\) 我 ...
- Educational Codeforces Round 53 E. Segment Sum(数位DP)
Educational Codeforces Round 53 E. Segment Sum 题意: 问[L,R]区间内有多少个数满足:其由不超过k种数字构成. 思路: 数位DP裸题,也比较好想.由于 ...
- Educational Codeforces Round 53 (Rated for Div. 2) E. Segment Sum
https://codeforces.com/contest/1073/problem/E 题意 求出l到r之间的符合要求的数之和,结果取模998244353 要求:组成数的数位所用的数字种类不超过k ...
- CodeForces - 1073E :Segment Sum (数位DP)
You are given two integers l l and r r (l≤r l≤r ). Your task is to calculate the sum of numbers from ...
- Educational Codeforces Round 53 (Rated for Div. 2) E. Segment Sum (数位dp求和)
题目链接:https://codeforces.com/contest/1073/problem/E 题目大意:给定一个区间[l,r],需要求出区间[l,r]内符合数位上的不同数字个数不超过k个的数的 ...
- E. Segment Sum(数位dp)
题意:求一个区间内满足所有数位不同数字个数小于K的数字总和.比如:k=2 1,2,3所有数位的不同数字的个数为1满足,但是123数位上有三个不同的数字,即123不满足. 我们可以使用一个二进制的数 ...
- CF 910 C. Minimum Sum
链接 [http://codeforces.com/group/1EzrFFyOc0/contest/910/problem/C] 题意 给你n个字符串,每个字符串的字符是a~j,每个字符都可以是0~ ...
随机推荐
- 解决laravel出现Syntax error or access violation: 1055 '***' isn't in GROUP BY
laravel 5.3 以后默认开启 mysql严格模式(strict)在mysql在严格模式下, 并且开启了ONLY_FULL_GROUP_BY的情况下,group by 的字段没有出现在 sele ...
- oracle备份报“EXP-00056: 遇到 ORACLE 错误 12541”
今天准备接手一个新项目,首先是dang项目和备份数据库到本地,但是在备份数据库的时候报错误: EXP-00056: 遇到 ORACLE 错误 12541 ORA-12541: TNS: 无监听程序 E ...
- Unity引用System.Windows.Forms遇到的一些坑
这两天在做一个unity打开文件选择框的功能.网上找到两种方法, 第一种是调用win32打开对话框,这个挺好,但是有个致命的问题,没办法多选!!!多选的话返回的是根目录的路径,文件名返回不了,找了半天 ...
- 隐藏pyqt中调用matplotlib图片中的工具栏
方法: # pyqtgraph使用matplotlib import pyqtgraph.widgets.MatplotlibWidget as mw a_plt = mw.MatplotlibWid ...
- i.MX RT1010之FlexIO模拟SSI外设
恩智浦的i.MX RT1010是跨界处理器产品,作为i.MX RT跨界MCU系列的一个新的切入点,i.MX RT1010是成本最低的LQFP封装方式与i.MX RT系列产品一贯的高性能和易用性的结合产 ...
- mybatis - buildSqlSessionFactory()
buildSqlSessionFactory() 这个方法比较长, 干的事情也比较多. 包括一些别名, 插件, 类型处理器等的解析. 从主流程上来看, 最主要的其实是干了两件事:1. 对 mapper ...
- Scrapy - response.css()
选择文本 response.css('span::text') 选择href response.css('a::attr(href)')
- 制作PPT时的一些技巧记录
1.当一页PPT上有很多图片,要选择其中一张图片时,发现图片都重叠了,不好选择时该怎么办? 2.对动画的编辑 技巧:与选择窗口配合使用
- 查看并下载MySQL对应jar包
打开已经安装的mysql文件位置 2.查看对应connector版本并下载jar包 3.下载对应jar包:http://central.maven.org/maven2/mysql/mysql-con ...
- Android9 http网络请求的问题
Google表示,为保证用户数据和设备的安全,针对下一代 Android 系统(Android P) 的应用程序,将要求默认使用加密连接,这意味着 Android P 将禁止 App 使用所有未加密的 ...