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到 ...
随机推荐
- PHP 优秀资源汇集(照搬)
文章目录 原文地址: https://shockerli.net/post/php-awesome/ GitHub: https://github.com/shockerli/php-awesome ...
- 13Oracle Database 存储过程
Oracle Database 存储过程 触发器相当于java中的事件监听,当某事件发生时激活特定的事件并执行相应的逻辑 DML触发器中包含了三种事件 insert update delete 语法格 ...
- spring boot MongoDb配置和多数据源
配置文件: # MongoDB配置项 mongodb.base.host: 192.168.1.204 mongodb. mongodb.base.database: xxx mongodb.base ...
- js继承的方式
深入理解继承的实现方式不仅仅有利于自己去造轮子,封装插件,更有利于我们去阅读一些框架的源码, 以下记录几种常见的继承方式 1. 原型链实现继承 function Father(){ this.name ...
- .net core 中简单封装Dapper.Extensions 并使用sqlsuger自动生成实体类
引言 由公司需要使用dapper 同时支持多数据库 又需要支持实体类 又需要支持sql 还需要支持事务 所以采用了 dapper + dapperExtensions 并配套 生成实体类小工具的方 ...
- input file 美化的方法
css input[type=file] 样式美化,input上传按钮美化 2014年8月29日 113210次浏览 由于明天公司组织出去游玩,今天把这两天的博客都写了吧,今天的内容是input[ty ...
- P1541 乌龟棋 题解(洛谷,动态规划递推)
题目:P1541 乌龟棋 感谢大神的题解(他的写的特别好) 写一下我对他的代码的理解吧(哎,蒟蒻就这能这样...) 代码: #include<bits/stdc++.h> #define ...
- POJ 3468 A Simple Problem with Integers(线段树水题)
A Simple Problem with Integers Time Limit: 5000MS Memory Limit: 131072K Total Submissions: 135904 ...
- 【01】CSS3 Gradient 分为 linear-gradient(线性渐变)和 radial-gradient(径 向渐变)(转)
CSS3 Gradient 分为 linear-gradient(线性渐变)和 radial-gradient(径 向渐变).而我们今天主要是针对线性渐变来剖析其具体的用法.为了更好的应用 CSS3 ...
- 【Codeforces 300C】Beautiful Numbers
[链接] 我是链接,点我呀:) [题意] 让你找到长度为n的数字 这个数字只由a或者b组成 且这n个数码的和也是由a或者b组成的 求出满足这样要求的数字的个数 [题解] 枚举答案数字中b的个数为y,那 ...