传送门

好神啊

直接考虑一棵 \(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. 初中级web前端工程师的面试题分享

    1.html三栏布局有几种(就是左右固定,中间自适应) 浮动布局float.定位布局.flex布局.表格布局.css3栅栏布局 <style media="screen"&g ...

  2. jquery, jquery-ui, requirejs, bootstrap 的关系理解

    jquery 是 基于 javascript 的一个语法衍生,更方便操作dom, 事件,css 整体来说更好用,更简洁. jquery-ui 是基于 jquery 实现的各种更好看,交互更友好的的界面 ...

  3. Jvm内存工具

    1,JConsole  位于 [JDK] bin 下, 2,代码查看当前进程堆内存 long maxMemory = Runtime.getRuntime().maxMemory();long tot ...

  4. ES6 箭头函数(Arrow Functions)

    ES6 箭头函数(Arrow Functions) ES6 可以使用 "箭头"(=>)定义函数,注意是函数,不要使用这种方式定义类(构造器). 一.语法 具有一个参数的简单函 ...

  5. Android 开发工具类 08_SDCardUtils

    SD 卡相关的辅助类: 1.判断 SDCard 是否可用: 2.获取 SD 卡路径: 3.获取 SD 卡的剩余容量,单位 byte: 4.获取指定路径所在空间的剩余可用容量字节数,单位byte: 5. ...

  6. 工具类APP

    应用名称 工具S 英文名称 未填写 应用描述 工具类APP 英文描述 未填写 应用官网 this 应用图标  

  7. 《Mysql技术内幕,Innodb存储引擎》——锁

    lock与latch 在数据库中lock与latch分别指不同的所. latch:可分为互斥量(mutex)和读写锁(rwlock),目的在于保证数据库内部的结构中共享资源并发时能够正确操作,其对象主 ...

  8. Android开发之漫漫长途 Ⅲ——Activity的显示之Window和View(2)

    该文章是一个系列文章,是本人在Android开发的漫漫长途上的一点感想和记录,我会尽量按照先易后难的顺序进行编写该系列.该系列引用了<Android开发艺术探索>以及<深入理解And ...

  9. MySQL 5.6 在线主从复制

    设:主库为master,从库为slave 1.备份主库数据(全库),且记录下 master_log_file,master_log_pos,用于后面设置slave时指定 备份脚本: mysqldump ...

  10. nginx pcre错误

    以上错误是因为pcre的路径指定的不对,--with-pcre模块应该指向的是pcre解压后的源码包,而不是pcre的安装路径. ]$./configure --prefix=/data01/logs ...