传送门

好神啊

直接考虑一棵 \(n+m\) 个叶子的 \(k\) 叉树,根结点权值为 \(\sum_{i\in m}(\frac{1}{k})^{deep_i}\)

对于一个 \(deep\) 的序列

如果 \(\sum_{i\in m}(\frac{1}{k})^{deep_i}+\sum_{i\in n}(\frac{1}{k})^{deep_i}=1\)

那么一定可以构造出一棵 \(k\) 叉树满足要求

(从deep大到小考虑,除去 \(k\) 进位)

那么对于一个答案数 \(x\),它的每一位的数字(可以通过退位)和 \(=m\)

退位就是 \(+k-1\),那么也就是 \(\sum\equiv m(mod~k-1)\)

同理 \(1-x\) 的每一位的数字(可以通过退位)和 \(=n\)

设位数为 \(l\)

即 \(l(k-1)+1-\sum\equiv n(mod~k-1)\)

那么可以设 \(f_{i,j}\) 表示小数点后前 \(i\) 位,每一位的数字和为 \(j\),的不同的数字个数

每次判断 \(j\le m,i(k-1)+1-j\le n\) 且 \(j\equiv m(mod~k-1),l(k-1)+1-j\equiv n(mod~k-1)\)

满足则贡献答案

\(i\) 只需要枚举到 \(n+m\) 即可

\(dp\) 只需要前缀和优化,注意要记录后缀 \(0\)

# include <bits/stdc++.h>
using namespace std;
typedef long long ll; const int maxn(2005);
const int mod(1e9 + 7); inline void Inc(int &x, int y) {
x = x + y >= mod ? x + y - mod : x + y;
} inline void Dec(int &x, int y) {
x = x - y < 0 ? x - y + mod : x - y;
} inline int Add(int x, int y) {
return x + y >= mod ? x + y - mod : x + y;
} inline int Sub(int x, int y) {
return x - y < 0 ? x - y + mod : x - y;
} int n, m, k, f[maxn << 1][maxn][2], ans, s[maxn][2]; inline int Check(int len, int sum) {
return sum % k == m % k && (len * k + 1 - sum) % k == n % k && len * k + 1 - sum <= n;
} int main() {
int i, j, r, t;
scanf("%d%d%d", &n, &m, &k), r = n + m, f[0][0][0] = 1, --k;
for (i = 1; i <= r; ++i) {
for (t = 0; t < 2; ++t)
for (s[0][t] = f[i - 1][0][t], j = 1; j <= m; ++j)
s[j][t] = Add(s[j - 1][t], f[i - 1][j][t]);
for (j = 0; j <= m; ++j) f[i][j][1] = Add(f[i - 1][j][0], f[i - 1][j][1]);
for (j = 1; j <= m; ++j)
for (t = 0; t < 2; ++t)
Inc(f[i][j][0], Sub(s[j - 1][t], j > k ? s[j - k - 1][t] : 0));
for (j = 0; j <= m; ++j) if (Check(i, j)) Inc(ans, f[i][j][0]);
}
printf("%d\n", ans);
return 0;
}

AGC009:Eternal Average的更多相关文章

  1. AtCoder Grand Contest 009 E:Eternal Average

    题目传送门:https://agc009.contest.atcoder.jp/tasks/agc009_e 题目翻译 纸上写了\(N\)个\(1\)和\(M\)个\(0\),你每次可以选择\(k\) ...

  2. 【AGC009E】Eternal Average

    [AGC009E]Eternal Average 题面 洛谷 题解 神仙题.jpg 我们把操作看成一棵\(k\)叉树,其中每个节点有权值,所有叶子节点(共\(n+m\)个)就是\(0\)或\(1\). ...

  3. AtCoder AGC009E Eternal Average (DP)

    题目链接 https://atcoder.jp/contests/agc009/tasks/agc009_e 题解 又被劝退了... 第一步转化非常显然: 就等价于一开始有一个数\(1\), 有\(\ ...

  4. AGC009E Eternal Average

    atc 神题orz 那个擦掉\(k\)个数然后写上一个平均值可以看成是\(k\)叉Huffman树的构造过程,每次选\(k\)个点合成一个新点,然后权值设为平均值.这些0和1都会在叶子的位置,同时每个 ...

  5. AT2294 Eternal Average

    题目 题目给我们的这个东西可以转化为一棵\(k\)叉树,有\(n+m\)个叶子节点,其中\(m\)个权值为\(1\),\(n\)个权值为\(0\),每个非叶子节点的权值为其儿子的平均值,现在问你根节点 ...

  6. 6127:Largest Average

    #include<bits/stdc++.h> using namespace std; int a[100001]; double ave[100001]; struct student ...

  7. 压力测试衡量CPU的三个指标:CPU Utilization、Load Average和Context Switch Rate

    分类: 4.软件设计/架构/测试 2010-01-12 19:58 34241人阅读 评论(4) 收藏 举报 测试loadrunnerlinux服务器firebugthread 上篇讲如何用LoadR ...

  8. 【AtCoder】AGC009

    AGC009 A - Multiple Array 从后往前递推即可 #include <bits/stdc++.h> #define fi first #define se second ...

  9. 第二章:javascript: 数组

    数组是编程世界里最常见的数据结构.任何一种编程语言都包含数组,只是形式稍微有差异.数组是编程语言中的内建类型,通常效率都很高.可以满足不同需求的数据存储,本章将探索javascript中的数组工作原理 ...

随机推荐

  1. elasticsearch Geo Bounding Box Query

    Geo Bounding Box Query 一种查询,允许根据一个点位置过滤命中,使用一个边界框.假设以下索引文档: PUT /my_locations { "mappings" ...

  2. Flask从入门到精通之大型程序的结构一

    尽管在单一脚本中编写小型Web 程序很方便,但这种方法并不能广泛使用.程序变复杂后,使用单个大型源码文件会导致很多问题.不同于大多数其他的Web 框架,Flask 并不强制要求大型项目使用特定的组织方 ...

  3. postgresql 脏读-dirtied

    共享缓冲区 在内存中读取或写入数据总是比在任何其他介质上更快.数据库服务器还需要用于快速访问数据的内存,无论是READ还是WRITE访问.在PostgreSQL中,这被称为"共享缓冲区&qu ...

  4. #阿里云#云服务器搭建git服务器

    前言:大家都知道,git是非常方便的版本控制工具,目前网上有很多免费的git仓库可以给我们使用,但是有些时候我们并不放心将我们的项目寄放在别人的服务器上,这个时候就需要自己搭建一个git服务器,十分的 ...

  5. 多线程编程,CPU是如何解决多线程内存访问问题的

    CPU对内存变量的修改是先读取内存数据到CPU Cache中,然后再由CPU做运算,运算完成后继续写入到内存中 在单核CPU中,这完全没有问题,然而在多核CPU中,每一个CPU核心都拥有自己独立的Ca ...

  6. 解决ssh/scp报错:Someone could be eavesdropping on you right now (man-in-the-middle attack)!

    主要现象:ssh/scp 失败,host key verification failed. # scp /home/iso/********.iso root@192.168.1.***:/home/ ...

  7. Win7下无法提交MapReduce Job到集群环境(转)

    一. 对hadoop eclipse plugin认识不足 http://zy19982004.iteye.com/blog/2024467曾经说到我最hadoop eclipse plugin作用的 ...

  8. 5-niginx-健康检查模块

    1,  nginx有一个自带的健康检查模块, 过于丑陋... 只需要在 nginx.conf下的http中的server配置如下即可 location /basic_status { stub_sta ...

  9. mysql 设置隔离级别

    查看隔离级别: mysql> select @@tx_isolation; +-----------------+ | @@tx_isolation | +-----------------+ ...

  10. JBoss Web和Tomcat的区别

    在Web2.0的时代,基于Tomcat内核的JBoss在J2EE应用服务器领域已成为发展最为迅速的应用服务器.这一青出于蓝而胜于蓝的产品与Tomcat的区别又在哪里? 基于Tomcat内核,青胜于蓝. ...