CF1073E Segment Sum
数位DP,求[L,R]区间内所有"数字内包含的不同数码不超过k个的数字"之和.在状态上加一维状态压缩表示含有的数码集合.一开始读错题以为是求数字的个数.读对题之后调了一会儿.
#include<cstdio>
typedef long long ll;
const int mod=998244353;
int cnt1[1024];
int f[20][1024],g[20][1024];
int F[20][1024],G[20][1024];
int p10[20];
void init(){
p10[0]=1;
for(int i=1;i<20;++i)p10[i]=p10[i-1]*10ll%mod;
cnt1[0]=0;
for(int i=1;i<1024;++i)cnt1[i]=cnt1[i>>1]+(i&1);
for(int i=0;i<10;++i)f[1][1<<i]=1,g[1][1<<i]=1,F[1][1<<i]=i,G[1][1<<i]=i;
g[0][0]=1;
for(int i=2;i<=18;++i){
for(int k=0;k<1024;++k){
for(int j=0;j<10;++j){
g[i][k|(1<<j)]=(g[i][k|(1<<j)]+g[i-1][k])%mod;
G[i][k|(1<<j)]=(G[i][k|(1<<j)]+G[i-1][k])%mod;
G[i][k|(1<<j)]=(G[i][k|(1<<j)]+g[i-1][k]*1ll*j%mod*p10[i-1]%mod)%mod;
}
for(int j=1;j<10;++j){
f[i][k|(1<<j)]=(f[i][k|(1<<j)]+g[i-1][k])%mod;
F[i][k|(1<<j)]=(F[i][k|(1<<j)]+G[i-1][k])%mod;
F[i][k|(1<<j)]=(F[i][k|(1<<j)]+g[i-1][k]*1ll*j%mod*p10[i-1]%mod)%mod;
}
}
}
}
int calc(ll lim,int c){//strictly less than lim
if(lim==(ll)(1e18)){
int ans=0;
for(int i=1;i<=18;++i){
for(int k=0;k<1024;++k){
if(cnt1[k]<=c)ans=(ans+F[i][k])%mod;
}
}
return ans;
}
int L[20],n=0;
while(lim){
L[++n]=lim%10;lim/=10;
}
int S=0;
int ans=0;
for(int i=1;i<=n-1;++i){
for(int k=0;k<1024;++k){
if(cnt1[k]<=c)ans=(ans+F[i][k])%mod;
}
}
int presum=0;
for(int i=n;i>=1;--i){
int lo=(i==n)?1:0;
for(int j=L[i]-1;j>=lo;--j){
int tmp=(1<<j)|S;
for(int k=0;k<1024;++k){
if(cnt1[tmp|k]<=c){
ans=(ans+g[i-1][k]*1ll*(presum*10ll+j)%mod*p10[i-1]%mod+G[i-1][k])%mod;
}
}
}
S|=(1<<L[i]);
presum=(presum*10ll+L[i])%mod;
}
return ans;
}
int main(){
init();
ll L,R;
int k;
scanf("%lld%lld%d",&L,&R,&k);
printf("%d\n",(calc(R+1,k)-calc(L,k)+mod)%mod);
return 0;
}
CF1073E Segment Sum的更多相关文章
- 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\) 我 ...
- Codeforces 1073 E - Segment Sum
E - Segment Sum 思路: 数位dp 我们平时做的数位dp都是求满足条件的数的个数, 这里要求满足条件的数的和 只要在原来的基础上求每一位的贡献就可以了,所以传参数时要传两个 代码: #p ...
- Educational Codeforces Round 53 E. Segment Sum(数位DP)
Educational Codeforces Round 53 E. Segment Sum 题意: 问[L,R]区间内有多少个数满足:其由不超过k种数字构成. 思路: 数位DP裸题,也比较好想.由于 ...
- 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 ...
- E. Segment Sum(数位dp)
题意:求一个区间内满足所有数位不同数字个数小于K的数字总和.比如:k=2 1,2,3所有数位的不同数字的个数为1满足,但是123数位上有三个不同的数字,即123不满足. 我们可以使用一个二进制的数 ...
- Educational Codeforces Round 53 (Rated for Div. 2) E. Segment Sum
https://codeforces.com/contest/1073/problem/E 题意 求出l到r之间的符合要求的数之和,结果取模998244353 要求:组成数的数位所用的数字种类不超过k ...
- CF 1073 E. Segment Sum
https://codeforces.com/problemset/problem/1073/E 题意:[l,r]中,出现0—9数字的种类数不超过k的数的和 dp[i][j][0/1] 表示 dfs到 ...
- Educational Codeforces Round 53 (Rated for Div. 2) E. Segment Sum (数位dp求和)
题目链接:https://codeforces.com/contest/1073/problem/E 题目大意:给定一个区间[l,r],需要求出区间[l,r]内符合数位上的不同数字个数不超过k个的数的 ...
随机推荐
- JavaScript模块化思想之入门篇
在写正文之前先写一点废话,从我大三下学期正式接触前端到现在,已经六个月了.自己从HTML,CSS,简单的JS验证开始,一点点开始走入前端的世界.越发的感觉前端这一领域散发着无穷的魅力,也许这和我真心喜 ...
- FPGA按一下按键,对应端口输出单个脉冲
对于FPGA的verilog语言,,,规定一个变量不能在多个always中被赋值.但是可以在多个alway块中做判断--结合状态机思想 module state(key,led,clk); input ...
- 大数据入门第十七天——storm上游数据源 之kafka详解(三)其他问题
一.kafka文件存储机制 1.topic存储 在Kafka文件存储中,同一个topic下有多个不同partition,每个partition为一个目录,partiton命名规则为topic名称+有序 ...
- 大数据入门第十七天——storm上游数据源 之kafka详解(一)入门与集群安装
一.概述 1.kafka是什么 根据标题可以有个概念:kafka是storm的上游数据源之一,也是一对经典的组合,就像郭德纲和于谦 根据官网:http://kafka.apache.org/intro ...
- PYQT5实现控制台显示功能
首先,写一个信号,用来发射标准输出作为信号 class EmittingStream(QtCore.QObject): textWritten = QtCore.pyqtSignal(str) #定义 ...
- python 带参数的多重继承
1. 不带参数的多重继承 # 作者:hhh5460 # 时间:2017.07.18 class A(object): def show_x(self): print('A') class B(obje ...
- 51nod 小朋友的笑话
链接 分析: 每次操作把以前没有出现这个数的设为1,有这个数的设为0.首先将当前区间设为1,考虑有set维护这个颜色出现的区间,然后把所有与当前区间相交的拿出来,修改为0. 复杂度?每次操作的线段只会 ...
- CF708D Incorrect Flow
CF708D Incorrect Flow 有源汇上下界最小费用可行流.(= =) 对每条给定的边连边: 首先\(f_i\)是给定的,所以要有一条这个边而且要流满,先\(a_i-b_i\)连一条上下界 ...
- 移动端H5页面上传图片或多张图片
传统PC网页上传文件,大家都已经熟悉,这里不做介绍. 本文简单介绍移动端常用上传图片功能.灵活使用轮询或长连接可实现PC与移动端数据同步,即PC端需要上传的图片是移动拍照下来或移动端硬盘储存的,不需要 ...
- effective c++ 笔记 (9-12)
//---------------------------15/03/29---------------------------- //#9 绝不在构造和析构过程中调头virtual函数 { / ...