首页 > 其他分享 >题解 ABC309Ex【Simple Path Counting Problem】

题解 ABC309Ex【Simple Path Counting Problem】

时间:2023-08-24 20:12:54浏览次数:45  
标签:le star qmul 2M Simple 题解 Poly ans ABC309Ex

好好玩的题。

设普通生成函数 \(F_i\),其中 \([z^k]F_i\) 表示从所有起点走到 \((i,k)\) 的方案数。特别地,\([z^k]F_1=\sum\limits_{a\in A}[a=k]\)。

注意到 \(F_i=(z^{-1}+1+z)F_{i-1}\) 几乎成立,但是在 \([z^1]F_i\) 和 \([z^M]F_i\) 处不成立。

尝试对 \(F_i\) 进行改造:

\[[z^k]F_i^\star= \begin{cases} 0,&k=0\lor k=M+1\\ [z^k]F_i,&1\le k\le M\\ -[z^{2M+2-k}]F_i,&M+2\le k\le 2M+1 \end{cases} \]

考察 \(F_i^\star\) 与 \((z^{-1}+1+z)\) 的循环卷积(即 \(\bmod (z^{2M+2}-1)\) 的结果),发现由于 \(F_i^\star\) 是由 \(F_i\) 沿着 \(k=M+1\) 翻折并取相反数得到的,\([z^0]F_i^\star\) 和 \([z^{M+1}]F_i^\star\) 永远会是 \(0\),这就防止了我们移动到网格外,从而使得循环卷积结果的系数恰好是 \(F_{i+1}^\star\) 的各项系数,即:

\[F_{i+1}^\star\equiv F_i^\star(z^{-1}+1+z)\pmod{(z^{2M+2}-1)} \]

使用快速幂即可,时间复杂度 \(O(M\log M\log N)\)。

去掉封装的核心代码:(完整代码

Poly<mod, g> qmul(const Poly<mod, g>& a, const Poly<mod, g>& b) {
    Poly<mod, g> ans = a * b;
    int sz = (int)ans.size();
    rep(i, 2*m+2, sz-1) ans[i%(2*m+2)] += ans[i];
    ans.resize(2*m+2);
    return ans;
}

Poly<mod, g> qpow(Poly<mod, g> a, int k) {
    Poly<mod, g> ans{1};
    for(; k; k >>= 1, a = qmul(a, a)) if(k & 1) ans = qmul(ans, a);
    return ans;
}

int main() {
    ios::sync_with_stdio(false);
    cin.tie(0); cout.tie(0);
    initPoly(N);
    cin >> n >> m >> k >> l;
    Poly<mod, g> a(2*m+2), b(2*m+2);
    rep(i, 1, k) {
        cin >> x;
        ++a[x];
        --a[2*m+2-x];
    }
    b[0] = b[1] = b[2*m+1] = 1;
    a = qmul(a, qpow(b, n-1));
    Modint<mod, g> ans = 0;
    rep(i, 1, l) {
        cin >> x;
        ans += a[x];
    }
    cout << ans << '\n';
    return 0;
}

标签:le,star,qmul,2M,Simple,题解,Poly,ans,ABC309Ex
From: https://www.cnblogs.com/ruierqwq/p/abc309h.html

相关文章

  • 国标GB2818视频平台EasyGBS国标平台与车机设备连接显示未连接成功的问题解决方法
    EasyGBS平台可提供流媒体接入、处理、转发等服务,支持内网、公网的监控设备通过国标GB/T28181协议进行视频监控直播。平台兼容性强,只要设备支持国标GB28181协议,均能快速接入EasyGBS,实现视频的监控直播、视频录像、语音对讲、云存储、检索及回放、告警、级联等。​......
  • 国标视频云服务EasyGBS国标平台与海康4200平台级联后不能播放的问题解决方法
    国标视频云服务EasyGBS支持设备/平台通过国标GB28181协议注册接入,并能实现视频的实时监控直播、录像、检索与回看、语音对讲、云存储、告警、平台级联等功能。平台部署简单、可拓展性强,支持将接入的视频流进行全终端、全平台分发,分发的视频流包括RTSP、RTMP、FLV、HLS、WebRTC等......
  • CodeForces1741G-Kirill and Company题解
    \(\large\text{CodeForces1741G-KirillandCompany题解}\)题面传送门(有翻译(由黄巨佬提供))思路预处理因为\(k\)很小,所以可以先bfs预处理出家在\(i(2\lei\len)\)的人能捎带上哪些集合的人,在表示集合时用一个\(0\)到\(2^k-1\)的整数\(j\)表示,若\(j\)在二进质下的......
  • Codeforces Round #849 (Div. 4) 题解
    第一次打$\text{Div.4}$,感觉体验还行,差一题AK。##A直接使用if语句判断某个字符是否在字符串$\text{codeforces}$中出现过,幼儿园小朋友都会做。时间复杂度$\mathcal{O}(T)$,空间复杂度$\text{O}(1)$。ACCode##B用两个变量$x,y$记录当前走到哪里。若出现过$x=1,y=1$的......
  • CF36D New Game with a Chess Piece 题解
    前言:都大半年没在洛谷上提交过题解了。SPOJ上有双倍经验,题号为SP7602。我看题解区的大佬们有的正经用博弈论做,有的打表,但是感觉没有讲得很形象,这篇题解将生动讲述打表做法,同时为了让大家在感性理解后,还可以理性理解,会附上证明(这部分参考了别的题解)。正文:Step1:打表找规律......
  • CF54C First Digit Law 题解
    题目传送门\(Solution\):一个比较简单的数位dp处理技巧加上一个暴力的dp。设\(p_i\)为区间\([l_i,r_i]\)中出现\(1\)开头的数的概率。考虑\(solve(x)\)函数为求出\([1,x]\)中开头为\(1\)的个数。显然低于\(x\)的位数的数是全部能取到的,这时候开头为\(1\)......
  • 题解 数数
    题目链接可持久化平衡树看上去很行的样子,但是我不会啊。。。先来考虑一个简化版的问题:求区间\([1,n]\)中\(\leH_i\)的元素个数。这显然是好做的,用权值树状数组就行。回到本题,显然:询问区间\([l,r]\)中\(\leH_i\)的个数,等价与区间\([1,r]\)的答案减去区间\([1,l-1]......
  • 国标视频云服务EasyGBS国标视频平台迁移服务器后无法启动的问题解决方法
    国标视频云服务EasyGBS支持设备/平台通过国标GB28181协议注册接入,并能实现视频的实时监控直播、录像、检索与回看、语音对讲、云存储、告警、平台级联等功能。平台部署简单、可拓展性强,支持将接入的视频流进行全终端、全平台分发,分发的视频流包括RTSP、RTMP、FLV、HLS、WebRTC等格......
  • P3742题解
    思路只需要让z串做到和y串一样,就得让y串每个字母(题意如此)均小于x串。所以只要x串有一项小于y串,那么就输出-1,否则输出y串。下面是核心代码:#include<bits/stdc++.h>usingnamespacestd;intn;stringx,y;intmain(){ cin>>n>>x>>y; for(inti=0;i<n;i++) { if(x[i]......
  • 【问题解决】容器部署MySQL的数据在docker commit导出的镜像中丢失
    问题起因最近公司有个甲方项目参加竞赛,要求在(基于kubeflow/arena)平台上部置应用,可以将MySQL打包在应用一起,也可以分开部署,没有提供volume相关的支持。大意是可以把初始好的数据直接拿到平台上。经过本人在Linux虚机中启动MySQL容器导入数据再dockercommit出镜像部署到平台......