看到这个就是数位DP了,然而细节极多,对于i=1状态直接判了,还有最后一位直接算了

设f[i][zt][0/1]表示枚举到第i位,用了那些数字,是否有前导0(前导0不计入数字,否则就不知道后面有没有0了)的数的和,g是数的个数

转移看代码

#include<cstdio>
#include<iostream>
#include<cstring>
#include<cstdlib>
#include<algorithm>
#include<cmath>
using namespace std;
typedef long long LL;
const LL mod=; int K,n,a[];
LL mi[],f[][][],g[][][];int o[];
LL calc(LL G)
{
memset(a,,sizeof(a));n=;
LL d=G;
while(d>)a[++n]=d%,d/=; LL ret=;int z=;d=;
for(int i=n;i>=;i--)
{
d=(d*)%mod;
for(int k=;k<a[i];k++)
{
LL t=ret;
if(k==&&i==n)
{
for(int zt=(<<)-;zt>=;zt--)
if(o[zt]<=K)
{
ret=(ret+f[i-][zt][]+f[i-][zt][])%mod;
}
}
else
{
for(int zt=(<<)-;zt>=;zt--)
{
if(o[zt|z|(<<k)]<=K)
ret=(ret+(mi[i-]*(d+k)%mod*g[i-][zt][]%mod)+f[i-][zt][])%mod;
if(o[zt|z|(<<k)|]<=K)
ret=(ret+(mi[i-]*(d+k)%mod*g[i-][zt][]%mod)+f[i-][zt][])%mod;
}
}
int p;p++;
}
z|=(<<a[i]);d=(d+a[i])%mod;
}
for(int k=;k<=a[];k++)
if(o[z|(<<k)]<=K)ret+=(d*+k)%mod;
return ret;
} int main()
{
mi[]=;for(int i=;i<=;i++)mi[i]=mi[i-]*%mod;
memset(f,,sizeof(f));
memset(g,,sizeof(g));
g[][][]=;
for(int k=;k<=;k++)f[][<<k][]=k,g[][<<k][]=;
for(int i=;i<=;i++)
for(int zt=(<<)-;zt>=;zt--)
{
f[i][zt][]=(f[i][zt][]+f[i-][zt][]+f[i-][zt][])%mod;
g[i][zt][]=(g[i][zt][]+g[i-][zt][]+g[i-][zt][])%mod;
//k==0; for(int k=;k<=;k++)
if(zt&(<<k))
{
f[i][zt][]=(f[i][zt][]+(mi[i-]*k%mod*g[i-][zt^(<<k)][]%mod)+f[i-][zt^(<<k)][])%mod;
g[i][zt][]=(g[i][zt][]+g[i-][zt^(<<k)][])%mod; f[i][zt][]=(f[i][zt][]+(mi[i-]*k%mod*(g[i-][zt][])%mod)+f[i-][zt][])%mod;
g[i][zt][]=(g[i][zt][]+g[i-][zt][])%mod;
if(zt&)
{
f[i][zt][]=(f[i][zt][]+(mi[i-]*k%mod*(g[i-][zt^(<<k)][]+g[i-][zt^(<<k)^][])%mod)+f[i-][zt^(<<k)][]+f[i-][zt^(<<k)^][])%mod;
g[i][zt][]=(g[i][zt][]+g[i-][zt^(<<k)][]+g[i-][zt^(<<k)^][])%mod; f[i][zt][]=(f[i][zt][]+(mi[i-]*k%mod*(g[i-][zt][]+g[i-][zt^][])%mod)+f[i-][zt][]+f[i-][zt^][])%mod;
g[i][zt][]=(g[i][zt][]+g[i-][zt][]+g[i-][zt^][])%mod;
}
}
}
memset(o,,sizeof(o));
for(int zt=(<<)-;zt>=;zt--)
for(int k=;k<=;k++)
if(zt&(<<k))o[zt]++; LL L,R;
scanf("%lld%lld%d",&L,&R,&K);
printf("%lld\n",((calc(R)-calc(L-))%mod+mod)%mod);
return ;
}

codeforce 1073E. Segment Sum的更多相关文章

  1. CF1073E Segment Sum 解题报告

    CF1073E Segment Sum 题意翻译 给定\(K,L,R\),求\(L~R\)之间最多不包含超过\(K\)个数码的数的和. \(K\le 10,L,R\le 10^{18}\) 数位dp ...

  2. Codeforces 1073 E - Segment Sum

    E - Segment Sum 思路: 数位dp 我们平时做的数位dp都是求满足条件的数的个数, 这里要求满足条件的数的和 只要在原来的基础上求每一位的贡献就可以了,所以传参数时要传两个 代码: #p ...

  3. CF1073E Segment Sum 自闭了

    CF1073E Segment Sum 题意翻译 给定\(K,L,R\),求\(L\)~\(R\)之间最多不包含超过\(K\)个数码的数的和. \(K<=10,L,R<=1e18\) 我 ...

  4. Educational Codeforces Round 53 E. Segment Sum(数位DP)

    Educational Codeforces Round 53 E. Segment Sum 题意: 问[L,R]区间内有多少个数满足:其由不超过k种数字构成. 思路: 数位DP裸题,也比较好想.由于 ...

  5. 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 ...

  6. CodeForce 577B Modulo Sum

    You are given a sequence of numbers a1, a2, ..., an, and a number m. Check if it is possible to choo ...

  7. E. Segment Sum(数位dp)

    题意:求一个区间内满足所有数位不同数字个数小于K的数字总和.比如:k=2   1,2,3所有数位的不同数字的个数为1满足,但是123数位上有三个不同的数字,即123不满足. 我们可以使用一个二进制的数 ...

  8. Educational Codeforces Round 53 (Rated for Div. 2) E. Segment Sum

    https://codeforces.com/contest/1073/problem/E 题意 求出l到r之间的符合要求的数之和,结果取模998244353 要求:组成数的数位所用的数字种类不超过k ...

  9. CF 1073 E. Segment Sum

    https://codeforces.com/problemset/problem/1073/E 题意:[l,r]中,出现0—9数字的种类数不超过k的数的和 dp[i][j][0/1] 表示 dfs到 ...

随机推荐

  1. [AC自动机模板]Keywords Search

    只是记录一下代码 AC自动机算法的教程请移步这里 还有这里 指针看着懵逼的还可以看一下这里 #include<iostream> #include<cstdio> #inclu ...

  2. PHP数据乱码

    本文主要总结下PHP数据乱码的解决方案 要点:多个不同文件系统里一定要统一编码 [注意] (1)HTML编码与MySQL编码一致: (2)PHP编码与MySQL编码一致: (3)header头发送字符 ...

  3. 09Oracle Database 数据表数据插入,更新,删除

    Oracle Database 数据表数据插入,更新,删除 插入数据 Insert into table_name(column) values(values); insert into studen ...

  4. Monkey进行测试时如何屏蔽掉状态栏和音量键

    我在学习的过程中使用简单的点击命令总是会触发到音量键和状态栏,由于我的测试机是虚拟按键所以也会触碰到 接下来说一下解决办法 全屏状态  adb shell settings put global po ...

  5. HDU - 5952 Counting Cliques(dfs搜索)

    题目: A clique is a complete graph, in which there is an edge between every pair of the vertices. Give ...

  6. JS中遍历EL表达式中后台传过来的Java集合

    前言:在我的项目里有这么一个情况,后台直接model.addAttribute()存储了一个对象,此对象内部有一个集合,前端JSP处理的方法正常情况下就是直接使用EL表达式即可.但是如果在JS中需要使 ...

  7. selenium的调用

    selenium的调用 制作人:全心全意 selenium调用谷歌浏览器 chrome = webdriver.Chrome() //创建谷歌浏览器对象 url="http://www.ba ...

  8. 7-26 Windows消息队列

    7-26 Windows消息队列(25 分) 消息队列是Windows系统的基础.对于每个进程,系统维护一个消息队列.如果在进程中有特定事件发生,如点击鼠标.文字改变等,系统将把这个消息加到队列当中. ...

  9. h5dnd sortable mutil groups

    h5dnd sortable mutil groups https://codepen.io/webgeeker/pen/JmPXaN https://codepen.io/webgeeker/pen ...

  10. 分块试水--CODEVS5037 线段树练习4加强版

    感觉这才算入门题吧..前面那些线段树练习,改几个字符就过了一定要搞成几道题.. n<=2e5的数列,给常数K<=2e5,m<=2e5个操作,区间加,问一个区间里K的倍数. 这题空间? ...