首页 > 其他分享 >[ABC315Ex] Typical Convolution Problem

[ABC315Ex] Typical Convolution Problem

时间:2023-11-27 17:46:51浏览次数:22  
标签:Convolution int text mid vector Solve ABC315Ex Problem FL

题目链接

首先观察到这个形式,容易发现它和常规的卷积不同点就在于:题目给出的求和定义中,\(\sum\) 符号下面的式子是 \(i+j<N\) 求和而不是 \(i+j=N\)。

为了方便计算,我们引入:

\[G_n=\sum_{i+j<N}F_iF_j \]

我们发现,假设所有 \(F_{1\sim{i-1}}\) 已经求解完毕了,那么我们就可以通过之前的量算出 \(G_i\),再转而去乘上 \(A_n\) 得到 \(F_i\)。

模拟题意的过程是 \(O(N^3)\),而利用 \(F,G\) 相互递推这个做法是 \(O(N^2)\) 的。这都没法满足数据范围需要的时间要求。

这时候,我们根绝由小推大的性质想到了利用 \(\text{CDQ}\) 分治去优化这个 \(O(N^2)\) 的算法。具体的,就是分治 \(\text{NTT}\)。为了更好地理清这个问题,我们不妨再来看一下 \(\text{CDQ}\) 分治的模板框架:

  • 当前区间长度为 \(1\)

    直接进行一些特殊的处理。

  • 当前区间 \([l,r]\) 长度 \(>1\)

    1. 递归处理左边区间 \([l,mid]\)
    2. 计算左边区间对右边的贡献
    3. 递归处理右边区间 \([mid+1,r]\)。

我们在长度为 \(1\) 的情况下就按照暴力中的处理方式来做,长度大于 \(1\) 就先递归做区间,中间利用 \(\text{NTT}\) 卷一下处理对右边的贡献,最后递归右边就行了。

值得一提的是,中间卷积处理贡献时,我们要分别计算 \(i\in[l,mid]\) 时的贡献,\(j\in[l,mid]\) 时的贡献(根据题意,如果两者都满足自然也是要算两遍),且 \(l=0\) 时特殊处理一下即可。

点击查看代码
#include <bits/stdc++.h>
#include "atcoder/convolution"
#define FL(i, a, b) for(int i = (a); i <= (b); ++i)
#define FR(i, a, b) for(int i = (a); i >= (b); --i)
using namespace std;
using atcoder::convolution;
using mint = atcoder::modint998244353;
constexpr int N = 2e5 + 10;
int n, A[N]; mint F[N], G[N];
void Solve(int l, int r){
    if(l == r){
        if(l) F[l] = (G[l] = G[l - 1] + F[l]) * A[l];
        return;
    }
    int mid = l + r >> 1; Solve(l, mid);
    if(!l){
        auto T = convolution(vector<mint>(F, F + mid + 1), vector<mint>(F, F + mid + 1));
        FL(i, mid + 1, r) F[i] += T[i - 1];
    }
    else{
        auto T = convolution(vector<mint>(F + l, F + mid + 1), vector<mint>(F, F + r - l + 1));
        FL(i, mid + 1, r) F[i] += T[i - l - 1] * 2;
    }
    Solve(mid + 1, r);
}
int main(){
    ios::sync_with_stdio(false);
    cin.tie(0), cout.tie(0);
    cin >> n; FL(i, 1, n) cin >> A[i];
    F[0] = 1, Solve(0, n);
    FL(i, 1, n) cout << F[i].val() << " \n"[i == n];
    return 0;
}

标签:Convolution,int,text,mid,vector,Solve,ABC315Ex,Problem,FL
From: https://www.cnblogs.com/zac2010/p/17859932.html

相关文章

  • 2023 合肥站 热身赛 B Problem F. Flower’s Land 换根dp 依赖背包
    传送门。求出包含某个点连通块大小为K的权值和最大值。钦定1为根节点,只求根节点的答案,其实是一个依赖性01背包问题可以\(nk\)的时间内解决。考虑进行换根操作,由于背包是取max的背包没办法进行背包的删除,然而取前后缀背包背包的合并为\(k^2\)复杂度过高。当时还有一个想法是点......
  • [ABC327G] Many Good Tuple Problems
    题目链接简化题意:有一个\(n\)个点的图,问有多少个长度为\(M\)的边序列,满足连边后图是二分图。\(n\le30,m\le10^9\)考虑先强制要求无重边。定义\(f_{i,j}\)为\(i\)个点,\(j\)条边的图的二分图染色数量(染色方式不同算多次)。这个是可以通过枚举黑色点的数量算出来。然......
  • OI_problem 玛丽卡_洛谷P1186
    题意一个\(N\)个点\(M\)条边的带边权无向图,要求输出最小的\(V\)使得不管去掉哪一条边,都存在从\(1\)到\(n\)的路径使得边权和不超过\(V\)。思路感觉朴素不太好做,考虑二分。对于一个二分值,即要判断在关于这个值的生成图中,\(1\)和\(n\)在不在一个边双里。考......
  • [Codeforces] CF1703F Yet Another Problem About Pairs Satisfying an Inequality
    时间限制\(2s\)|空间限制\(250M\)题目描述给你一个序列$a_1,a_2,\dotsa_n$。请计算出满足下面条件的$(i,j)(1\leqi,j\leqn)$个数。$a_i<i<a_j<j$.输入格式第一行包含一个整数$t$($1\leqt\leq1000$)—测试数据的个数每一个......
  • [Codeforces] CF1858C Yet Another Permutation Problem
    YetAnotherPermutationProblem-洛谷这题本来很简单,思路我也想到了,但是代码一直没写对,思路也一直换来换去(悲然而发现最开始的思路是对的题意Alex收到了一个名为"GCD排列"的游戏作为生日礼物。这个游戏的每一轮进行如下操作:首先,Alex选择一个整数序列\(a_1,a_2,…,a_......
  • [ABC327D] Good Tuple Problem 题解
    分析:这一道题很容易发现可以用并查集来维护(不知道为什么其他人都用了图论),\(a_i\)与其对应的\(b_i\)代表着\(a_i\)这个集合里不能存在着\(b_i\)。根据只有存在两个集合,所以我们会发现,若\(x\)与\(y\)不在一个集合且\(x\)与\(z\)也不在一个集合,那么\(x\)和\(y\)......
  • Convolutional Neural Networks on Graphs with Chebyshev Approximation, Revisited
    目录概符号说明MotivationChebNetII代码HeM.,WeiZ.andWenJ.Convolutionalneuralnetworksongraphswithchebyshevapproximation,revisited.NIPS,2022.概作者剖析了ChebNet存在的一些缺陷,并通过约束系数获得更好的性能.符号说明\(V\),nodeset;\(E\),......
  • CF1858C Yet Another Permutation Problem
    CF1858CYetAnotherPermutationProblemYetAnotherPermutationProblem-洛谷这题本来很简单,思路我也想到了,但是代码一直没写对,思路也一直换来换去(悲然而发现最开始的思路是对的题意Alex收到了一个名为"GCD排列"的游戏作为生日礼物。这个游戏的每一轮进行如下操作:......
  • git SSL certificate problem: unable to get local issuer certificate
    错误:gitSSLcertificateproblem:unabletogetlocalissuercertificate这个问题是由于没有配置信任的服务器HTTPS验证。默认,cURL被设为不信任任何CAs,就是说,它不信任任何服务器验证。解决方法gitconfig--globalhttp.sslVerifyfalse......
  • JWT - Problem of JWT
        ......