首页 > 其他分享 >「解题报告」AGC009E Eternal Average

「解题报告」AGC009E Eternal Average

时间:2023-04-27 11:55:47浏览次数:45  
标签:le frac AGC009E int Average Eternal 序列 sum equiv

笑了,题意转换的思路大致都是对的,不知道为啥猜成与题解结论完全相反的结论了。

首先考虑将这个过程看做是一棵满 \(k\) 叉树,其中有 \(n + m\) 个叶子,\(n\) 个叶子为 \(0\),\(m\) 个叶子为 \(1\)。不难发现,如果一个 \(1\) 的深度为 \(x\),那么它对最后的数造成的贡献为 \(\frac{1}{k^x}\)。

那么假如我们考虑 \(0, 1\) 的深度序列 \(\{x_i\}, \{y_i\}\),考虑什么样的序列能够对应到一颗树上。发现实际上就是如果把 \(0, 1\) 都算上贡献,最后和为 \(1\)。即:\(\sum \frac{1}{k^{x_i}} + \sum \frac{1}{k^{y_i}} = 1\)。证明考虑每次将次数最大的 \(k\) 个数进行合并,如果不能合并显然不可能等于 \(1\),于是一定可以通过这样的合并方式得到一棵合法的树。

那么我们相当于要统计满足上述的 \(\{x_i\}, \{y_i\}\) 序列中,有多少个不同的 \(\sum \frac{1}{k^{x_i}}\)。考虑将后面这个数写成 \(k\) 进制的形式,那么我们的问题就是对于一个序列 \(\{z_i\}\),能否将 \(\sum z_i k^i\) 表示成 \(\sum k^{x_i}\)。可以通过从高到低位依次满足的方式构造出一种方案,由于每次往下放一位造成的差值为 \(k-1\),那么只需要满足 \(\sum z_i \equiv n \pmod {k-1}\) 即可保证这个数一定可以被构造出来。

我们假设最终的数为 \(p\),那么我们一开始得出的条件实际上是要求:

  • \(p\) 能够被表示成 \(n\) 个 \(\frac{1}{k^ {x_i}}\) 的加和;
  • \(1 - p\) 能够被表示成 \(m\) 个 \(\frac{1}{k^ {y_i}}\) 的加和;

那么我们现在就可以将题意转换成统计有多少合法的长为 \(l\) 的 \(\{z_i\}\) 序列,满足:

  • \(0 \le z_i < k\);
  • \(z_l \ne 0\);
  • \(\sum z_i \le n, \sum z_i \equiv n \pmod {k-1}\);
  • \(1 + \sum (k - z_i + 1) \le m, 1 + \sum (k - z_i + 1) \equiv m \pmod {k-1}\);

这个容易 DP 得出答案。

#include <bits/stdc++.h>
using namespace std;
const int MAXN = 4005, P = 1000000007;
int n, m, k;
int f[MAXN][MAXN];
int main() {
    scanf("%d%d%d", &n, &m, &k);
    int ans = 0;
    for (int i = 0; i <= n; i++)
        f[0][i] = 1;
    for (int i = 1; i <= n + m; i++) {
        for (int j = max(0, (k - 1) * i - m + 1); j <= n; j++) {
            f[i][j] = (f[i - 1][j] - f[i - 1][max(0, j - (k - 1)) - 1] + P) % P;
            if ((j - n) % (k - 1) == 0)
                ans = (1ll * ans + 
                    f[i - 1][j - 1] - f[i - 1][max(0, j - (k - 1)) - 1] + P) % P;
            f[i][j] = (f[i][j] + f[i][j - 1]) % P;
        }
    }
    printf("%d\n", ans);
    return 0;
}

标签:le,frac,AGC009E,int,Average,Eternal,序列,sum,equiv
From: https://www.cnblogs.com/apjifengc/p/17358525.html

相关文章

  • 迁移学习(MEnsA)《MEnsA: Mix-up Ensemble Average for Unsupervised Multi Target Doma
    论文信息论文标题:MEnsA:Mix-upEnsembleAverageforUnsupervisedMultiTargetDomainAdaptationon3DPointClouds论文作者:AshishSinha,JonghyunChoi论文来源:2023 CVPR论文地址:download 论文代码:download视屏讲解:click1前言单目标域和多目标域2介绍单......
  • echarts 数据密集,如果设置sampling: 'average' 会导致提示框(tooltip)无法正常显示,但是
    如果数据比较密集,设置sampling:'average'确实可以加速绘图,但同时也可能导致提示框无法正常显示的问题。这个问题的原因是,sampling会对数据进行抽样,因此不会显示原始的数据点,而是将数据点以一定规律进行采样,取平均值或最大或其他值,因此提示框的内容可能不准确。不过,有一个简单的......
  • 2022-04-23:给定你一个整数数组 nums 我们要将 nums 数组中的每个元素移动到 A 集合 或
    2022-04-23:给定你一个整数数组nums我们要将nums数组中的每个元素移动到A集合或者B集合中使得A集合和B集合不为空,并且average(A)==average(B)如果可以完成则返回true,否则返回false。注意:对于数组arr,average(arr)是arr的所有元素的和除以arr长度。输入......
  • 使用Python实现Hull Moving Average (HMA)
    赫尔移动平均线(HullMovingAverage,简称HMA)是一种技术指标,于2005年由AlanHull开发。它是一种移动平均线,利用加权计算来减少滞后并提高准确性。HMA对价格变动非常敏感,同时最大程度地减少短期波动可能产生的噪音。它通过使用加权计算来强调更近期的价格,同时平滑数据。计算HMA的公......
  • python 实现 average pooling 和 max pooling
    pooling的主要作用1.首要作用:下采样,降维,去除冗余信息。同时扩大感受野,保留了featuremap的特征信息,降低参数量。2.实现非线性,一定程度上避免过拟合。3.可以实现特征......
  • D. Keep the Average High
    https://codeforces.com/problemset/problem/1616/Dgreatquestion!题解:首先我们令a[i]-=x,这样条件变成了区间和>=0.由裴蜀定理,n可以分解为2x+3y。我们提出以下命题:对......
  • [LeetCode] 1792. Maximum Average Pass Ratio
    Thereisaschoolthathasclassesofstudentsandeachclasswillbehavingafinalexam.Youaregivena2Dintegerarray classes,where classes[i]=[pass......
  • abc236 E - Average and Median
    题意:在给定数组中选数,要求任意相邻的两数至少选一个。问选出来的数的最大平均数和最大中位数\(n\le1e5,1\lea_i\le1e9\)思路:平均数、中位数的典中典二分+转化this......
  • Eternal_Battle
    我对你发不了脾气。我只是希望你回答我的问题。不要看到了不回复。我不知道该怎么骂你,你也没有骂过我。小时候一直遭受冷暴力,难道长大之后也一直这样吗?如果嫌我烦我可......
  • 时间序列分析 Tsfresh 基于统计学的时间序列分析方法 3、差分整合移动平均自回归模型(A
    原文链接:点这里在了解了AR和MA模型后,我们将进一步学习结合了这两者的ARIMA模型,ARIMA在时间序列数据分析中有着非常重要的地位。但在这之前,让我们先来看ARIMA的简化版ARMA......