CF908G New Year and Original Order
题面
题意翻译
给定$n<=10^{700}$,问$1$到$n$中每个数在各数位排序后得到的数的和。答案$mod\;10^9+7$。
题解
考虑设$f[i][j][k][0/1]$表示前$i$位有$j$位的数字大小$\geq k$,是否严格小于$n$的方案数
转移时,枚举第$i+1$位填$p$
$$ f[i+1][j+(p\geq k)][k][l|(p < a_{i+1})]=\sum f[i][j][k][l] $$
答案就是
$$ \sum_k\sum_j (f[n][j][k][0]+f[n][j][k][1])\times \underbrace{111\cdots 11}_{j个1} $$
代码
#include<cstdio>
#include<cstring>
#include<cctype>
#include<algorithm>
#define RG register
#define file(x) freopen(#x".in", "r", stdin);freopen(#x".out", "w", stdout);
#define clear(x, y) memset(x, y, sizeof(x))
const int maxn(710), Mod(1e9 + 7);
int n, ans, f[maxn][maxn][10][2], a[maxn];
char s[maxn];
inline int Add(int x, int y) { return (x + y) % Mod; }
inline void Plus(int &x, const int &y) { x = Add(x, y); }
int main()
{
scanf("%s", s + 1); n = strlen(s + 1);
for(RG int i = 1; i <= n; i++) a[i] = s[i] - '0';
for(RG int i = 0; i < 10; i++) f[0][0][i][0] = 1;
for(RG int i = 0; i < n; i++)
for(RG int j = 0; j <= i; j++)
for(int k = 1; k < 10; k++)
for(int l = 0; l <= 1; l++)
for(int p = 0; p <= (l ? 9 : a[i + 1]); p++)
Plus(f[i + 1][j + (p >= k)][k][l | (p < a[i + 1])],
f[i][j][k][l]);
for(int k = 1; k < 10; k++)
{
int num = 1;
for(RG int i = 1; i <= n; i++)
Plus(ans, 1ll * num * (f[n][i][k][0] + f[n][i][k][1]) % Mod),
num = (10ll * num % Mod + 1) % Mod;
}
printf("%d\n", ans);
return 0;
}
CF908G New Year and Original Order的更多相关文章
- CF908G New Year and Original Order 数位DP
传送门 看到数据范围到\(10^{700}\)毫无疑问数位DP.那么我们最重要的问题是如何有效地维护所有数位排序之后的数的值. 对于某一个数\(x\),设\(f_{x,i} (i \in [1,9]) ...
- CF908G New Year and Original Order(DP,数位 DP)
又一次降智…… (数位 DP 原来可以写这么短,学到了) 问题可以转化为求数位中 $\ge k$ 的有恰好 $j$ 位的数的个数.设为 $c_{j,k}$. 那么答案就是:(考虑把 $k$ 的贡献拆开 ...
- 【CF908G】New Year and Original Order(动态规划)
[CF908G]New Year and Original Order(动态规划) 题面 洛谷 CF 题解 设\(f[i][j][k][0/1]\)表示当前填到了第\(i\)位,有\(j\)个大于等于 ...
- 【CF908G】New Year and Original Order 数位DP
[CF908G]New Year and Original Order 题意:令S(i)表示将i中所有数位上的数拿出来,从小到大排序后组成一个新的数的值.如S(50394)=3459.求$\sum\l ...
- 【CF908G】New Year and Original Order
[CF908G]New Year and Original Order 题面 洛谷 题解 设\(f[i][j][k][l]\)表示当前在第\(i\)位有\(j\)位大于等于\(k\),当前有没有卡上界 ...
- Good Bye 2017 G. New Year and Original Order
G. New Year and Original Order time limit per test 2 seconds memory limit per test 256 megabytes inp ...
- CF908G Original Order
题目大意: 定义\(R(x) = 每个数在各数位排序后得到的数\) 例如:\(R(321597) = 123579\) 给定一个\(n<=10^{700}\),求\(\sum _{i=1}^n ...
- 908G New Year and Original Order
传送门 分析 代码 #include<iostream> #include<cstdio> #include<cstring> #include<string ...
- Codeforces908G. New Year and Original Order
给n<=10^700,问1到n中每个数在各数位排序后得到的数的和.答案膜1e9+7. 一看就是数位DP啦..然而并没有什么思路.. 可以尝试统计n(i,j)表示数j在第i位的出现次数,知道了这个 ...
随机推荐
- [IIS] [PHP] 500.19 随机出现
微信确认有BUG: https://support.microsoft.com/en-au/help/3007507/-http-error-500.19-error-when-you-browse- ...
- asp.net mvc多级目录结构和多级area实现技巧
今天在工作要实现这个多级area.其原因是这个项目需要多级的功能,大的类别里有小的类别,小的类别里有具体的功能项,每一个功能项还有若干动作Action,所以在菜单和mvc工程的结构上都需要有体现多级的 ...
- 一些centos 6和centos 7的区别
CentOS 6(OLE 6,RHEL 6类似) CcnetOS 7(OLE 7,RHEL 7类似) 影响 默认文件系统 ext4 xfs 大量小文件在ext4上工作性能较好在64位linux中, ...
- 拟牛顿 DFP matlab
function sevnn x=[1,0]'; [x,val]=dfp('fun','gfun',x) end function f=fun(x) f=100*(x(1)^2-x(2))^2+(x( ...
- Win10下安装sulley
sulley是一款针对网络协议的fuzz框架,记录下安装过程备忘 1.安装MinGW 下载:https://github.com/develersrl/gccwinbinaries/releases/ ...
- Service Mesh服务网格之Linkerd架构
今天详细介绍一下Linkerd的架构. 控制平面 Linkerd控制平面是一组在专用Kubernetes命名空间中运行的服务(在Linked默认情况下).这些服务完成各种事情——聚合遥测数据.提供面向 ...
- Mysql数据库字符集问题
修改mysql数据库的默认编码方式 修改my.ini文件 加上 default-character-set=gb2312 设定数据库字符集 alter database da_name default ...
- linux centos 7.5下 源码编译安装 lua环境
lua 5.3.5 下载安装时发现缺少库 readline 需要添加依赖 yum search readline 看有哪些包 安装带有 devel 字样的 安装无 devel 的非开发包,通常不会自动 ...
- virtualbox迁移已建虚机存储磁盘方法
1. 先关闭虚拟机 2. 将虚拟机的磁盘拷贝或移动到想要存储的位置,virtualbox一般为.vdi文件(虚拟磁盘文件) 3. vboxmanage internalcommands sethduu ...
- docker 部署 redmine 项目管理软件
最近部署一套redmine项目管理程序, ruby部署各种问题,用docker 直接run, 简单方便. . docker run --name=mysql-redmine -d -p : -v /d ...