codeforce 1073E. Segment Sum
看到这个就是数位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的更多相关文章
- CF1073E Segment Sum 解题报告
CF1073E Segment Sum 题意翻译 给定\(K,L,R\),求\(L~R\)之间最多不包含超过\(K\)个数码的数的和. \(K\le 10,L,R\le 10^{18}\) 数位dp ...
- Codeforces 1073 E - Segment Sum
E - Segment Sum 思路: 数位dp 我们平时做的数位dp都是求满足条件的数的个数, 这里要求满足条件的数的和 只要在原来的基础上求每一位的贡献就可以了,所以传参数时要传两个 代码: #p ...
- 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裸题,也比较好想.由于 ...
- 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 ...
- 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 ...
- 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到 ...
随机推荐
- CAD由一个自定义实体事件中的id得到自定义实体对象(com接口VB语言)
由一个自定义实体事件中的id得到自定义实体对象.该函数只能在自定义实体事件中调用. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 2 ...
- dom4j使用方法详解
本文先做知识点的简单介绍,最后附完整案例. 一.解析XML文件 public class Foo { //url为XML文档地址 //自己封装了一个工具类 返回解析完成的document public ...
- HTML `capture` 属性
file 类型的 <input> 除了调起系统的文件选择框外,还可通过指定 capture 属性来现场拍照或录制.配合 accept 属性,可实现更加便捷的文件获取. 比如想要录制一段视频 ...
- Day 14B 网络应用开发
网络应用开发 发送电子邮件 在即时通信软件如此发达的今天,电子邮件仍然是互联网上使用最为广泛的应用之一,公司向应聘者发出录用通知.网站向用户发送一个激活账号的链接.银行向客户推广它们的理财产品等几乎都 ...
- enote笔记语言(3)(ver0.4)
章节:enote笔记语言(3) what&why(why not)&how&when&where&which:紫色,象征着神秘而又潜蕴着强大的力量,故取 ...
- 每日命令:(3)pwd
Linux中用 pwd 命令来查看”当前工作目录“的完整路径. 简单得说,每当你在终端进行操作时,你都会有一个当前工作目录. 在不太确定当前位置时,就会使用pwd来判定当前目录在文件系统内的确切位置. ...
- Tclientdate的排序
CDS_common.IndexDefs.Clear; CDS_common.AddIndex('JSPH','JSPH',[],'JSPH'); CDS_common.A ...
- log4j.properties配置内容的理解
一直知道log4j是用来记录日志的,但一直没去看log4j到底是怎么用的,这两天看了几个log4j.properties配置语句详解的帖子,在这里简陋地记录一下. 在完全不知道log4j怎么用的时候, ...
- UVALive 7008 Tactical Multiple Defense System
Tactical Multiple Defense System Time Limit:3000MS Memory Limit:0KB 64bit IO Format:%lld &a ...
- NYOJ 832 合并游戏
合并游戏 时间限制:1000 ms | 内存限制:65535 KB 难度:4 描述 大家都知道Yougth除了热爱编程之外,他还有一个爱好就是喜欢玩.某天在河边玩耍的时候,他发现了一种神奇的石 ...