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到 ...
随机推荐
- Python-Day07-图形用户界面和游戏开发
Python-100Day-学习打卡Author: Seven_0507Date: 2019-05-22123 文章目录Python图形用户界面和游戏开发1. tkinter模块2. Pygame进行 ...
- java 23种设计模式 链接集锦
创建型抽象工厂模式 http://www.cnblogs.com/java-my-life/archive/2012/03/28/2418836.html工厂方法 http://www.cnblogs ...
- CAD把当前图上数据保存为一个二进流对象(com接口VB语言)
主要用到函数说明: MxDrawXCustomFunction::WriteBinStreamEx 把当前图上数据保存为一个二进流对象,详细说明如下: 参数 说明 LPCTSTR pszPasswor ...
- Java基础——面向对象(封装——继承——多态 )
对象 对象: 是类的实例(实现世界中 真 实存在的一切事物 可以称为对象) 类: 类是对象的抽象描述 步骤: 1.定义一个类 (用于 描述人:) ( * 人:有特征和行为) 2.根据类 创建对象 -- ...
- vuecli开发项目,文件打包后,appjs/vendorjs文件过大
项目上线后,浏览器第一次加载会特别特别慢,network中看到vendorjs文件1.9M,不慢才怪. echarts按需引入后,也有1.1M左右,由于对vue脚手架理解不深,自己扒了大量的文档,又测 ...
- 洛谷——P1073 最优贸易
P1073 最优贸易 n 个城市间以 m 条有向道路连接, 小 T 从 1 号城市出发, 将要去往 n 号城市.小 T 观察到一款商品 Z 在不同的城市的价格可能不尽相同,小 T 想要在旅行中的某一个 ...
- ROS lesson 1
ROS ROS官网 ROS 简介 ROS 是 Robot Operation System 的简写,并且 他诞生在2000年后,至今有10余年了,运行在 Linux(Ubuntu) 上 ROS 不是 ...
- Linux命令rsync使用总结
详细用法见:https://www.cnblogs.com/oboth-zl/articles/10334754.html rsync命令简介 主要用于数据同步.备份和镜像,除了本地使用之外,也可以通 ...
- Python面向对象类的特殊成员方法
类的特殊成员方法:1.__doc__ : 打印类下面的注释 2.__module__和__class__:from lib.aa import C输出类被导出的模块名lib.aa,输出类的模块名和类名 ...
- laravel 开发辅助工具
laravel 开发辅助工具 配置 添加服务提供商 将下面这行添加至 config/app.php 文件 providers 数组中: 'providers' => [ ... App\Plug ...